問題タブ [boost-unordered]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - C++ boost::unordered_map と boost::hash に関するいくつかの質問
私は最近、boost とそれがコンテナーであることに関心を持ち始めたばかりであり、web と stackoverflow で、boost::unordered_map が大きなコレクションの最速のコンテナーであるという記事をいくつか読みました。したがって、私はこのクラス State を持っています。これはコンテナー内で一意でなければならず (重複はありません)、コンテナーには数十億ではないにしても数百万の状態が存在します。そのため、サイズを小さくし、計算をできるだけ少なくするように最適化しようとしています。以前はboost::ptr_vectorを使用していましたが、stackoverflowで読んだように、ベクターはオブジェクトがそれほど多くない場合にのみ有効です。私の場合、状態はロボットからの感覚運動情報を記述するため、膨大な量の状態が存在する可能性があるため、高速検索が最優先事項です。ブーストのドキュメントに従うunordered_map については、高速化するためにできることが 2 つあります。hash_function を使用し、等値演算子を使用して、hash_function に基づいて状態を比較します。そこで、ステート情報を取り込み、boost::hash_combine を使用して std::size_t ハッシュ値を作成するプライベート hash() 関数を実装しました。operator== は、基本的に状態のハッシュ値を比較します。そう:
std::size_t は、数十億の可能性のある hash_function の組み合わせをカバーするのに十分ですか? 状態の重複を避けるために、hash_values を使用するつもりです。
state_map を作成するとき、State* またはハッシュ値をキーとして使用する必要がありますか? すなわち:
boost::unordered_map<State*,std::size_t> state_map;
またはboost::unordered_map<std::size_t,State*> state_map;
boost::unordered_map::iterator = state_map.find() を使用したルックアップ時間は、boost::ptr_vector を通過して各反復子のキー値を比較するよりも高速ですか?
最後に、このような順序付けられていないマップを最適化して速度と高速ルックアップを実現する方法に関するヒントやコツを教えていただければ幸いです。
編集:私はかなりの数の答えを見てきました.1つはブーストを使用せずにC ++ 0X、もう1つはunordered_setを使用しないことですが、正直に言うと、boost::unordered_setがハッシュ関数でどのように使用されるかをまだ知りたいです. ブーストのドキュメントに従って実装しましたが、順序付きセットでブーストのハッシュ関数を使用する方法がまだわかりません。
c++ - ブースト シリアライゼーションの使用に関する問題
以下の問題について教えてください。私は成功せずに3日間試しました。
問題はシリアル化コードにあります。シリアル化をインスタンス化しようとするたびに、このエラーが発生します。
以下は私が書いたコードです
c++ - boost :: unordered_map std :: unordered_mapのようなreserve()がありません
次のタスクでは、非常に大きなハッシュを使用する必要があります。古いコンパイラを使用しているため、C++0xを使用できませんstd::unordered_map
。理想的には、reserve
たくさんのアイテムのために事前に部屋を空けるための電話が必要です。私はこの方法を見つけることができませんboost::unordered_map
:同じことを達成する場所や機能はありますか?
2つの連想コンテナは同じです。バケットの数を制御するための関数と同じコンストラクターは表示rehash
されますが、要素の数に関する関数は表示されません。
それを手伝ってくれませんか。
c++ - リストに変更を加える際の std::string および std::list の boost::unordered_map のスレッド セーフ
boost::unordered_map<const std::string, std::list<TypeA> >
パフォーマンスが重要なマルチスレッド環境でを使用しています。STL コンテナーへの書き込みはスレッド セーフではないことを理解していますboost::unordered_map
。
ここで、タイプ A の要素を としてリストに追加または削除する場合、他のスレッドが残りの部分を読み書きできるように、変更中のリストをロックするのではなく、マップ全体をロックする必要がありますか?キーと値のペア?
リストが別の STL コンテナーに置き換えられた場合はどうなるでしょうか。
ありがとう。
c++ - Boost の順序付けされていないコンテナの `std::bitset` または `boost::dynamic_bitset<>` の効率的なハッシュ
std::bitset
ハッシュする、またはboost::dynamic_bitset<>
Boost の順序付けられていないコンテナーの効率的な方法があるかどうか疑問に思っていますか?
std::bitset
現在、ハッシュする前にorboost::dynamic_bitset<>
を最初に変換std::string
していますが、これは遅くなるようです。
何か良い方法はありますか?
c++ - イテレータは、セットが変更されていない限り、boost::unordered_set または boost::unordered_map を同じ順序で反復しますか?
セットまたはマップが変更されていない限り、反復子は同じ順序で繰り返しますboost::unordered_set
か?boost::unordered_map
c++ - C ++:boost :: unordered_mapを反復しようとすると、operator<に一致しません
私は次のコードを持っています:
コンパイルしようとすると、次のエラーが発生しますが、理由がわかりません。
boost - multi_indexhashed_uniqueとunordered_mapルックアップのパフォーマンスを向上させる
boost::unordered_map
と boost::multi_index
コンテナ(ハッシュされた一意のインデックスを使用)のルックアップパフォーマンスは同じですか。コンテナでboost::multi_index
は、2つのルックアップを実行する必要があると思います。1つは、ハッシュインデックスを表す(そして、そのキーに関連付けられた実際の値へのポインタを含む)テーブルで、2つ目は、あなたの価値に到達するためにそのポインタに従う必要があります。boost::unordered_map
実装はこの2番目のルックアップを回避する可能性があるようです(したがって、より高速です)。
c++ - std::string キーを使用して boost::unordered::unordered_map から値を復元中にエラーが発生しました
正規表現の一致から得た結果を unordered_map に保存しています。std::cout サブルーチンは m[1].str() および m[2].str() に一致し、キーと値のペアを正しく表示します。
それらをunordered_mapに保存すると、キーが見つからなかったという例外が常に発生します.これはコードです:
DEPOT_PATH は、構成ファイル内の「変数」の名前です。std::cout << m[1].str() はそれを完全に示していますが、unordered_map には見つかりません。何か案は?
c++ - 順序付けられていないマップをブーストするための挿入
こんにちは、boost::unordered_map にレコードを挿入しようとしています
マップは次のように定義されます
入力はクラスです
以下のように関数を使用してレコードを挿入します
コンテナーにデータを挿入する関数と書かれているブーストのドキュメントを読みましたinsert()
が、コンパイルするとエラーが表示されます。