問題タブ [boost-multi-index]
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++ - 値が std::shared_ptr であるマップを使用することは、クラスのマルチインデックス リストを持つための適切な設計選択ですか?
問題は単純です: メンバー a、b、c、d を持つクラスがあります... 迅速に検索 (キーは 1 つのメンバーの値) を行い、a の現在の値を提供することによって新しい値でクラス リストを更新できるようにしたいと考えています。または b または c ... の束を持つことを考えました
std::map<decltype(MyClass.a/*b,c,d*/),shared_ptr<MyClass>>
。
1) それは良い考えですか?
2) ブースト マルチ インデックスは、この手作りのソリューションよりあらゆる点で優れていますか?
PS SQL は、単純さ/パフォーマンスの理由から問題外です。
c++ - C++ で値ごとに複数のキーをサポートするマップ
単一の値にマップする複数のキー (エイリアス) をサポートする既製の連想マップ コンテナーを探しています。
既成の解決策がない場合、2 つの別々のマップを使用する必要がありますか、それともより良い方法がありますか?
std::multimap は私が望むものとは逆のようです。
ほぼ同じこの質問には、boost::multi_index の受け入れられた回答がありますが、ドキュメントを見て、その使用方法に完全に困惑しています。
multi_index がこれを実装するのに役立つ場合、誰かに例がありますか??
c++ - Boost MultiIndex を LRU キャッシュとして使用する場合の C++ インデックスの順序付けの問題
この例に基づいて、Boost.MultiIndex を使用して作成された次の LRU 実装があります。
問題は、index_by セクションの順序を変更すると (それに応じて enum index_idx を更新すると)、以下を含む行でエラーが発生することです。
次の診断を使用します。
エラー 1 エラー C2661: 'boost::multi_index::detail::sequenced_index::insert': オーバーロードされた関数は 1 つの引数を取らない c:\code\code.cpp 79
コードは次のとおりです。
変更されたインデックスの順序:
boost - boost::bind - メンバー変数への書き込みアクセスを取得していますか? (boost::multi_index::member と同様)
好奇心から、メンバー変数への書き込みアクセスを取得する方法はありますboost::bind
か? 経由で取得できますがboost::multi_index::member
、他の方法も知りたいだけです。
例:
出力:
c++ - イテレータを使用してブースト マルチインデックスからアイテムを削除するときの一貫性
std::vectors およびより一般的にはすべての STL コンテナーについて、次のコードが正しくないことはわかっています。
イテレータは消去と要素の後に更新する必要があるためです。
ブーストマルチインデックスでも同じかどうか疑問に思っていました。たとえば、次のようなものが正しいかどうか:
ドキュメントの次の段落をよく理解したいと思います: http : //www.boost.org/doc/libs/1_51_0/libs/multi_index/doc/tutorial/indices.html#guaranteesイテレータを無効にすることなく消去できます。ただし、要素を削除したため、反復中にアクセスすることになっている別の要素が現在の反復子の位置の前に移動され、アクセスされない可能性があるかどうかはわかりません (つまり、反復中にいくつかの要素を消去することにより、私はまだすべての要素を通過することを確信していますか?)。
ありがとう!
boost - multi_indexhashed_uniqueとunordered_mapルックアップのパフォーマンスを向上させる
boost::unordered_map
と boost::multi_index
コンテナ(ハッシュされた一意のインデックスを使用)のルックアップパフォーマンスは同じですか。コンテナでboost::multi_index
は、2つのルックアップを実行する必要があると思います。1つは、ハッシュインデックスを表す(そして、そのキーに関連付けられた実際の値へのポインタを含む)テーブルで、2つ目は、あなたの価値に到達するためにそのポインタに従う必要があります。boost::unordered_map
実装はこの2番目のルックアップを回避する可能性があるようです(したがって、より高速です)。
c++ - String-Interning に使用するコンテナ
私の目標は、ストリングインターニングを行うことです。このために、次のことができるハッシュ化されたコンテナー クラスを探しています。
- ノードごとに 1 つのメモリ ブロックのみを割り当てる
- ノードごとに異なるユーザーデータ サイズ
値の型は次のようになります。
すべての String オブジェクトのサイズは異なります。これは、演算子 new + 配置 new で実現されます。したがって、基本的にはノードを自分で割り当てて、後でコンテナーにプッシュしたいと考えています。
以下の容器は適していません:
- std::unordored_set
ブースト::マルチインデックス::*
異なるサイズのノードを割り当てることはできません
boost::intrusive::unordered_set
最初はうまくいくようです。しかし、いくつかの欠点があります。まず、バケット配列を割り当て、負荷係数を自分で維持する必要があります。これは単に不必要であり、エラーが発生しやすいものです。
しかし、もう 1 つの問題は解決が困難です。文字列型のオブジェクトしか検索できません。しかし、エントリを探すたびに文字列を割り当てるのは非効率的で、入力として std::string しかありません。
このタスクに使用できるハッシュ化されたコンテナーは他にありますか?
c++ - ファイルに格納されたブースト multi_index_container の永続性
メモリ マップド ファイル内に割り当てられたブースト multi_index_container に頼ることはできますか? この種の「データベース」は、同じエンディアンを持つコンピューター間で移植できますか?
c++ - multi_index_containerをクリアする
私のコード(私のコードではない)に、boostmulti_index_containerを使用するクラスがあります
};
すべての変数と型が適切に定義されていると仮定します。スニペットを台無しにしたくありません。コードは実際に機能します。私がやりたいのは、clear
すべての要素を消去する関数を追加することです。
誰かが助けることができますか?これに関して100行のエラーが発生します!!!
gdb - gdb.lookup_type が boost::multi_index_container で無効な型を返す
gcc-4.7.2 でコンパイルされた RHEL 6 で gdb-7.5 を使用しています。用のプリティ プリンタを作成しようとしていて、 でboost::multi_index
問題が発生しましgdb.lookup_type
た。
以下のコードには、次の宣言があります。
今、gdb コマンド プロンプトで、次の操作を実行しています (Python で)
node_type を正しく取得しています。しかし、gdb は 'base' と 'allocator' の型を取得できません。
ベースのエラー
「アロケーター」の同様のエラー。から派生した
ように、gdb が同じものに対して有効な型を返すことを期待しています。boost::multi_index_container
boost::detail::multi_index_base_type
ここで何か不足していますか??
gdb メーリング リストに同じ質問を投稿しましたが、回答がありませんでした。
コード:
スーリヤ