簡単な質問... hash_mapはSTLの一部ですか?
STL には hash_map
、ただしC++標準ライブラリ しない 。
一般的な誤解 のため、C++標準ライブラリを「STL」と考えるか、ツールチェーンのC++標準ライブラリの実装の一部を「STL実装」と考えることができます。
そうではない。
また、MSVC++とGCC(hash_map
はコンパイラ固有の拡張機能として)、 std
名前空間に配置 。これは非常に誤解を招くだけでなく、規格ごとに違法です。 *はぁ*
C++ 11で std::unordered_map
、これは異なるものではありません。
Wikipediaを引用(強調を追加):
[〜#〜] stl [〜#〜] ページから:
標準テンプレートライブラリ(STL)は、C++標準ライブラリに含まれるソフトウェアライブラリ部分的です。
...そして hash_map ページから
C++プログラミング言語では、
hash_map
は、標準テンプレートライブラリのハッシュされた連想コンテナの名前です。 GNU C++コンパイラーおよびMicrosoftのVisual C++など)のいくつかの実装者によって提供されます。C++標準ライブラリの一部ではありません、ただしC++テクニカルレポート1には非常によく似たコンテナunordered_map
、これは今後のC++ 0x標準に含まれます。
要するに、
問題は、用語[〜#〜] stl [〜#〜]の意味が合意されていないことです。 hash_map
標準C++の一部?いいえ、そうではありません。 unordered_map
は、新しいC++標準の一部となりますが、ハッシュを使用して実装されたマップです。
はい、hash_map
は [〜#〜] stl [〜#〜] の一部です。ただし、C++ 03の標準ライブラリのnot部分です。
hash_mapはSTLの一部ですが、標準C++(C++ 11)の一部ではありません。標準C++には、「std :: unordered_map」という名前のhash_mapの同様の実装があります。 http://www.cplusplus.com/reference/unordered_map/unordered_map/
現在、GNU C++およびMSVC++は、Boostと同様に、コンパイラ拡張用のhash_mapを実装しています。一方、SGIにはhash_mapの独自の実装があります。 http:// www .sgi.com/tech/stl/hash_map.html 詳細.