web-dev-qa-db-ja.com

hash_mapはSTLの一部ですか?

簡単な質問... hash_mapはSTLの一部ですか?

57
Jake

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標準に含まれます。

要するに、

  • [〜#〜] yes [〜#〜]それはSTLの一部です。
  • しかし、それはIS NOT標準ライブラリの一部です。
  • しかし、いくつかの非常に一般的な実装でサポートされています。
15
razlebe

問題は、用語[〜#〜] stl [〜#〜]の意味が合意されていないことです。 hash_map標準C++の一部?いいえ、そうではありません。 unordered_mapは、新しいC++標準の一部となりますが、ハッシュを使用して実装されたマップです。

7

はいhash_map[〜#〜] stl [〜#〜] の一部です。ただし、C++ 03の標準ライブラリのnot部分です。

5
Alexandre C.

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 詳細.

2
holybiner