web-dev-qa-db-ja.com

hash_mapとunordered_mapの違いは?

C++でのハッシュマップの実装がunordered_mapと呼ばれることを最近発見しました。

hash_mapを使用していない理由を調べたところ、hash_mapが解決するunordered_mapの実装に互換性の問題があることを発見しました(詳細については こちら) )。

そのwikiページはそれ以上の情報を提供しないので、誰かがhash_mapunordered_mapが解決する問題のいくつかを知っていたかどうか疑問に思います。

45
kidnamedlox

C++標準ライブラリではハッシュテーブルが定義されていないため、標準ライブラリの異なる実装者は、しばしばhash_mapという名前の非標準ハッシュテーブルを提供します。これらの実装は標準に従って書かれていないため、すべての機能とパフォーマンスの保証に微妙な違いがありました。

C++ 11 以降、ハッシュテーブルの実装がC++標準ライブラリ標準に追加されました。これらの非標準の実装との衝突を防ぎ、コードにhash_tableが含まれる開発者による新しいクラスの不注意による使用を防ぐために、クラスに代替名を使用することが決定されました。

選択された代替名はunordered_mapです。これは、クラスのマップインターフェイスとその要素の順序付けされていない性質を示唆しているため、より説明的です。

70
Stef