私は通常、特定のタイプの値(キー値-文字列またはその他のオブジェクト)に関連付けられたデータを保存する必要がある場合は常にC++ stdlibマップを使用します。 stdlibマップの実装は、標準の配列またはstdlibベクトルよりも優れたパフォーマンス(O(log n))を提供するツリーに基づいています。
私の質問は、さらに優れたパフォーマンス(O(1))を提供するC++の「標準」ハッシュテーブル実装を知っていますか? Java API。のHashtableクラスで利用可能なものに類似したもの。
C++ 11を使用している場合は、<unordered_map>
および<unordered_set>
ヘッダーにアクセスできます。これらはクラス std::unordered_map
および std::unordered_set
を提供します。
TR1でC++ 03を使用している場合、同じヘッダーを使用して、クラスstd::tr1::unordered_map
およびstd::tr1::unordered_set
にアクセスできます(GCCを使用している場合を除き、ヘッダーは<tr1/unordered_map>
および<tr1/unordered_set>
です)。
すべての場合に、対応するunordered_multimap
およびunordered_multiset
型もあります。
Unordered_mapまたはunordered_setがまだない場合、それらは boost の一部です。
両方のドキュメントがあります 。
hash_map オブジェクトがここで多く言及しているようにありますが、それはstlの一部ではありません。これはSGI拡張機能であるため、STLで何かを探していた場合、運が悪いと思います。
Visual Studioのヘッダーstdext::hash_map
には<hash_map>
クラスがあり、gccには同じヘッダーに__gnu_cxx::hash_map
クラスがあります。
<unordered_map>
のstd :: tr1 :: unordered_map
tr1がない場合、boostを取得し、<boost/unordered_map.hpp>
でboost :: unordered_mapを使用します
Yorコンパイラで利用可能なTR1拡張機能がある場合は、それらを使用します。そうでない場合、boost.orgのバージョンはstd ::名前空間を除いて非常に似ています。その場合は、後で宣言を使用できるようにusing-declarationを入力します。
SGIの std :: hash_map を参照してください。
これは STLPort ディストリビューションにも含まれています。
hash_mapは、GNUの libstdc ++ でもサポートされています。
Dinkumwareも supports これは、多くの実装がhash_mapを持っていることを意味します(Visual C++でもDinkumwareで提供されると思います)。