google::dense_hash_map?
使い方
- ヘッダオンリーなのでソースをダウンロードして#includeするだけ
- 使う前に
set_empty_key(key)
を実行しなければいけない ←これ重要
- ここで設定したキーは、ハッシュマップに格納できなくなる
- これが
std::unrodered_map
と比べたときの欠点
- また、要素を削除する前に
set_deleted_key(key)
を実行する必要あり
- 要素を削除しない(挿入するだけ)場合は不要
set_empty_key(key)
とは別のキーを設定しなければならない
- その他は基本的に
std::unordered_map
と同じ
サンプルコード
#include <iostream>
#include <string>
#include "google/dense_hash_map"
int main() {
google::dense_hash_map<std::string, std::string> smap;
smap.set_empty_key("Mori");
smap.insert({"Kimura", "Takuya"});
smap.insert({"Kusanagi", "Tsuyoshi"});
smap.insert({"Katori", "Shingo"});
std::cout << smap["Kusanagi"] << std::endl;
return 0;
}
注意点
- バケット数の調整は
reserve()
ではなくresize()
clear()
はバケット数もリセットしてしまう
- STLの
clear()
と同じ挙動をするのはclear_no_resize()
clear_no_resize()
するときはset_deleted_key(key)
が必要
パフォーマンス
- 使ってみると
std::unordered_map
より確かに速い
- ベンチマークは以下のページなどに載っている