NLPだとstd::mapとtr1::unordered_mapなら後者を使うことになることが多いと思うけど、あれこれ混乱してきたのでメモる。NLPerなら押さえておくべき常識のはず。。。
それぞれの特徴
データ構造 | std::map | tr1::unordered_map |
---|---|---|
実装 | 赤黒木 | ハッシュテーブル |
find | log n | Average case: O(1), Worset case: O(n) |
insert | log n | Average case: O(1), Worset case: O(n) |
delete | log n | Average case: O(1), Worset case: O(n) |
メリット | キーでソート済みなことが保障されているので、ある範囲でiterationさせたいとき、deleteするなどの操作を効率的に行うことができる | バケット数を最初にきちんと設定しておけば大体の操作が定数で済む*1。mapよりもメモリが少なくて済む |
Effective STL―STLを効果的に使いこなす50の鉄則
- 作者: スコットメイヤーズ,Scott Meyers,細谷昭
- 出版社/メーカー: ピアソンエデュケーション
- 発売日: 2002/01
- メディア: 単行本
- 購入: 9人 クリック: 155回
- この商品を含むブログ (95件) を見る
参考
- Comparison with Associative Containers - 1.47.0
- 色々な操作の計算量について
- STL風に使えるマップ型コンテナの紹介と性能比較 | Preferred Research
- メモリ使用量の付近
- 第7回 性能改善の鍵,インデックスの特性を知る~B-treeとハッシュ (2)ハッシュ :SQLアタマアカデミー|gihyo.jp … 技術評論社
- BoostでC++0xのライブラリ「TR1」を先取りしよう (5) (2/2):CodeZine(コードジン)
- 要素数分かってる場合はrehashを予めやっておくとinsertionで十分に速度が出せる
*1:3/4くらい埋まるとrehashする仕様みたい。Rehashは重い操作なので、なるべく回数を少なくしたい