C++vectorとunordered_map浅析
6248 ワード
C++に内蔵された配列はコンテナのメカニズムをサポートするが,コンテナの抽象的な意味をサポートしない.この問題を解決するには、私たち自身がこの種類を実現します.標準C++では、コンテナベクトル(vector)で実現されています.コンテナベクトルもクラステンプレートです.vectorの導入は、配列に比べて一連のデータの処理を容易にしたと言えます.スケールオーバーなどのオーバーフロー問題を考慮する必要はありません.
vecorを使用するには、ヘッダファイル#includeを導入する必要があります.ネーミングスペースにはusing std::vectorを導入する必要があります.また、vectorは連続的に保存されています!!!
簡単なストレージ操作:
それから穴のこれを比較して、注意すればOKです:
初期化時に直接v 1[i]=valueではなく、v 1しか使用できないことを覚えておいてください.push_back(i);
詳しくはご覧くださいhttps://www.cnblogs.com/mengfanrong/p/3770971.html
もっと簡単にunordered_を紹介しますmap
C++11規格にはunorderedシリーズの容器が入っています.unordered_mapは要素のhash値を記録し,hash値に基づいて要素が同じか否かを判断する.mapはjavaのTreeMap,unordered_に相当しますmapはHashMapに相当します.検索、挿入にかかわらずunordered_mapの効率はhash_より優れているmapはmapより優れている.空間の複雑さの面ではhash_map最低、unordered_mapに次いでmapが最大です.
導入するヘッダファイル#include、ネーミングスペースはusing std::unordered_を導入する必要がありますmap、私の理解は彼をキー値のペアとして覚えています.すなわち、(key、value)、私たちのファイル管理システムのページテーブルインデックスなど、多くの場合に使われています.リファレンスhttps://www.cnblogs.com/evidd/p/8823092.html
二数和のアルゴリズムを見てみましょう
転載先:https://www.cnblogs.com/SHNLQS-1273196803/p/11051218.html
vecorを使用するには、ヘッダファイル#includeを導入する必要があります.ネーミングスペースにはusing std::vectorを導入する必要があります.また、vectorは連続的に保存されています!!!
簡単なストレージ操作:
vector<int> v1;
for (vector<int>::size_type i = 0; i < 10; i++) {
v1.push_back(i);
}
cout << "adjective:";
for (vector<int>::size_type i = 0; i < 10; i++) {
cout << v1[i] << setw(4);
}
それから穴のこれを比較して、注意すればOKです:
//v1 n i
vector<int> v1(n,i);
//v2 n i
vector<int> v2({n,i});
初期化時に直接v 1[i]=valueではなく、v 1しか使用できないことを覚えておいてください.push_back(i);
詳しくはご覧くださいhttps://www.cnblogs.com/mengfanrong/p/3770971.html
もっと簡単にunordered_を紹介しますmap
C++11規格にはunorderedシリーズの容器が入っています.unordered_mapは要素のhash値を記録し,hash値に基づいて要素が同じか否かを判断する.mapはjavaのTreeMap,unordered_に相当しますmapはHashMapに相当します.検索、挿入にかかわらずunordered_mapの効率はhash_より優れているmapはmapより優れている.空間の複雑さの面ではhash_map最低、unordered_mapに次いでmapが最大です.
導入するヘッダファイル#include、ネーミングスペースはusing std::unordered_を導入する必要がありますmap、私の理解は彼をキー値のペアとして覚えています.すなわち、(key、value)、私たちのファイル管理システムのページテーブルインデックスなど、多くの場合に使われています.リファレンスhttps://www.cnblogs.com/evidd/p/8823092.html
二数和のアルゴリズムを見てみましょう
//
#include
#include
#include
#include
using std::cin;
using std::cout;
using std::endl;
using std::vector;
using std::unordered_map;
using std::setw;
class Change {
public:
vector<int> twoSum(vector<int>& nums, int target) {
vector<int> res;
unordered_map<int, int> hash;
for (int i = 0; i < nums.size(); i++) {
// ,
int another = target - nums[i];
if (hash.count(another)) {
//res , 0 ,
res = vector<int>({ hash[another],i });
break;
}
hash[nums[i]] = i;
}
cout << nums[res[0]] << setw(2) << nums[res[1]] << endl;
return res;
}
};
int main(int argc, char* argv[]) {
vector<int> array;
for (vector<int>::size_type i = 0; i < 5; i++) {
array.push_back(i + 1);
}
int target = 6;
Change c;
vector<int> change;
change = c.twoSum(array, target);
return 0;
}
転載先:https://www.cnblogs.com/SHNLQS-1273196803/p/11051218.html