C++11 unordered map(mapとは少し違うよー)
Sponsored Links
皆さんこんにちは
お元気ですか。早起きするとしんどいですね。
さて、今日はC++11で実装されたunordered mapとやらを見てみよう。
unordered_mapって?
C++11にて追加されたSTLです。
mapはTree構造で実装されているのに対し、unordered_mapはHashでの実装を実現しているそうです。
mapは自動的にソートが行われるのに対し、unordered_mapではソートが行われません。
使ってみよう
ヘッダーと宣言
#include <unordered_map> //ヘッダー unordered_map<int,int> mp; //map
Access
at または mapと同じ
mp[0] = 2 + 4; cout << mp[0] << endl; cout << mp.at(0) << endl;
Size
cout << mp.size() << endl;
ループ
全て出力する方法を2通り
iterator
unordered_map<int,int>::iterator itr = mp.begin(); for(itr; itr != mp.end(); itr++){ cout << itr->first << " " << itr->second << endl; }
foreach
cout << "output unordered_map" << endl; for(auto pair:mp){ cout << pair.first << " " << pair.second << endl; }
mapにコピー
map<int,int> normal_map(mp.begin(),mp.end()); for(auto pair:normal_map){ cout << pair.first << " " << pair.second << endl; }
これを利用することでソートを可能にします。
全て纏めたソースコード
#include <iostream> #include <unordered_map> #include <map> using namespace std; int main(int argc, char const *argv[]){ unordered_map<int,int> mp; for(int i = 0; i < 10; i++){ for(int j = 0; j < 10; j++){ mp[i] = i + j; } } cout << "access" << endl; cout << mp[0] << endl; cout << mp.at(0) << endl; cout << "size" << endl; cout << mp.size() << endl; cout << "output unordered_map using iterator" << endl; unordered_map<int,int>::iterator itr = mp.begin(); for(itr; itr != mp.end(); itr++){ cout << itr->first << " " << itr->second << endl; } cout << "output unordered_map" << endl; for(auto pair:mp){ cout << pair.first << " " << pair.second << endl; } cout << "copy to map" << endl; map<int,int> normal_map(mp.begin(),mp.end()); for(auto pair:normal_map){ cout << pair.first << " " << pair.second << endl; } return 0; }