【C++】C++で連想配列\HashMapの実装をしてみた
C++ STLのunordered_mapを利用してリストからからO(1)で要素を取り出すコードC++で実装
ハッシュテーブルを使ってO(1)で配列から取り出せますよ連想配列のアレですよ
文字列をキー
オブジェクトは自作クラス
で書いてます。
★おしながき
・格納
・参照
・キーの存在の有無
・キー指定して削除
・要素数取得
・全要素削除
・ループ内での削除
・ループで列挙
クラスはシンプルにint.stringのメンバのみ。
class CL{ public: int d; string s; CL(int _d, string _s) : d(_d), s(_s){ } };
以下コード
#include <unordered_map> using namespace std;
unordered_map<string, CL*> map; //格納 map["鞄"] = new CL(123, "かばん"); map["serval"] = new CL(456, "さーばる"); map["ねこ"] = new CL(789, "すなねこ"); map["あらーいさーん"] = new CL(111, "アライグマ"); map["フェネック"] = new CL(222, "Fennec"); //参照 CL *cl = map["鞄"]; printf("refer [%d][%s]\n", cl->d, cl->s.c_str() ); //キーの存在確認 if(map.find("鞄") != map.end()){ puts("あるよ!"); } //キー指定して削除 { auto itr = map.find(""); itr = map.find("鞄"); if(itr != map.end()) map.erase(itr); } //要素数取得 printf("size: %d\n", map.size() ); //全要素削除 //map.clear(); //ループ内で削除 for(auto itr = map.begin(); itr != map.end();++itr){ //キー指定して削除 if(itr->first == "ねこ"){ string s = itr->first; CL *cl = itr->second; printf("delete. [%s][%d]\n", s.c_str(), cl->d); itr = map.erase(itr); itr--; } } //列挙 for(auto itr = map.begin(); itr != map.end(); ++itr){ string s = itr->first; CL *cl = itr->second; printf("print: [%s][%d]\n", s.c_str(), cl->d); }