[解決済み] mapとunordered_mapのどちらを選択するか?
質問
文字列をキーとしたデータをマッピングしたいとします。
どのようなコンテナを選べばよいのでしょうか。
map
それとも
unordered_map
?
unordered_map
はより多くのメモリを消費するので、メモリは問題ではなく、懸念は速度であるとします。
unordered_map
は一般に O(1) の平均的な複雑さを与え、最悪の場合は O(n) となるはずです。
どのような場合にO(n)になるのでしょうか?
どのような場合に
map
よりも時間効率が良くなるのはいつですか?
unordered_map
? nが小さいとそうなるのでしょうか?
STLを使用すると仮定して
unordered_map
で、デフォルトの haser Vs. map で、string がキーになります。
もし私が毎回個々の要素にアクセスするのではなく、要素に対して反復処理を行うのであれば、どちらかというと
map
?
どのように解決するのですか?
実際には、メモリが問題ない場合
unordered_map
の方が常に高速です。
最悪のケースは理論的なもので、すべての要素を占める単一のハッシュに束縛されます。これは実用的な関連性ではありません。その
unordered_map
は、同じハッシュに属する要素が少なくとも対数Nになるとすぐに遅くなります。これも実用的な関連性ではありません。ある特別なシナリオでは、より均一な分布を保証する特定のハッシュ アルゴリズムを使用することができます。特定のパターンを共有しない普通の文字列の場合、一般的なハッシュ関数は
unordered_map
で提供される一般的なハッシュ関数がちょうどよいでしょう。
イテレータを使って)マップをソートしてたどりたい場合は
unordered_map
. それどころか
map
はそれを可能にするだけでなく、キーの近似値に基づいてマップの次の要素を提供することもできます (
lower_bound
と
upper_bound
メソッド)。
関連
-
[解決済み】cc1plus:エラー:g++で認識されないコマンドラインオプション"-std=c++11"
-
[解決済み】オブジェクト引数のない非静的メンバ関数の呼び出し コンパイラーエラー
-
[解決済み】VC++の致命的なエラーLNK1168:書き込みのためにfilename.exeを開くことができません。
-
[解決済み] 変数サイズのオブジェクトが初期化されないことがある c++
-
[解決済み] Java Mapの各エントリを効率的に反復処理するには?
-
[解決済み] 辞書を値で並べ替えるにはどうしたらいいですか?
-
[解決済み] Pythonのリストメソッドであるappendとextendの違いは何ですか?
-
[解決済み] Pythonの辞書からキーを削除するにはどうしたらいいですか?
-
[解決済み] 辞書のリストを辞書の値でソートするにはどうしたらいいですか?
-
[解決済み】2つの辞書を1つの式でマージする(辞書の和をとる)には?)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】非静的メンバ関数への参照を呼び出す必要がある
-
[解決済み】クラステンプレートの引数リストがない
-
[解決済み】C++ 式はポインタからオブジェクトへの型を持っている必要があります。
-
[解決済み] error: 'if' の前に unqualified-id を期待した。
-
[解決済み】'cout'は型名ではない
-
[解決済み】デバッグアサーションに失敗しました。C++のベクトル添え字が範囲外
-
[解決済み】指定範囲内の乱数で配列を埋める(C++)
-
[解決済み] 些細なキーの場合、unordered_mapよりもmapを使用する利点はありますか?
-
[解決済み】C++ マップのループ処理
-
[解決済み] C++におけるmapとhash_mapの比較