2009-10-29 13 views
39

私は最近、C++でのハッシュマップの実装がunordered_mapと呼ばれることを発見しました。彼らはただhash_mapを使用していなかった理由は、私が見上げたときhash_mapとunordered_mapの違いは?

、私は明らかにhash_mapunordered_mapことを決議する(それhere詳細)の実装との互換性の問題があることを発見しました。

そのwikiページはそれほど多くの情報を提供していないので、誰かがhash_mapの問題のいくつかを知っているのではないかと疑問に思っています。unordered_mapが解決します。

答えて

63

C++標準ライブラリで定義されたハッシュテーブルがないため、標準ライブラリのさまざまな実装者は、多くの場合、hash_mapという名前の非標準ハッシュテーブルを提供します。これらの実装は標準に従って書かれていないため、機能と性能の保証に微妙な違いがありました。

C++11で始まり、ハッシュテーブル実装がC++標準ライブラリ標準に追加されました。これらの非標準実装との衝突を防ぎ、コードにhash_tableがあった開発者が誤って新しいクラスを使用することを防ぐために、クラスの代替名を使用することに決めました。

選択された別名はunordered_mapです。実際には、クラスのマップインターフェイスとその要素の順序付けられていない性質をヒントしています。

+4

これは、 'std'名前空間が望んだことを全く行なわなかったことを示すものの1つです。問題を合理的に防ぐことができたことが分かっているわけではありません。 –

+1

tr1のようにネストされた名前空間... –

+0

MSVCは、標準拡張ライブラリのstdextを持っていました。 – Puppy

関連する問題