問題タブ [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.

0 投票する
2 に答える
738 参照

c++ - ブースト マルチ インデックスのシーケンス インデックスに挿入するためのマッチング関数

ブースト マルチ インデックスのシーケンス インデックスに関する非常に簡単な質問があります。コードは次のとおりです。

Link.hpp に保存されている私のクラス:

そして主な機能:

sequenced<> が存在する場合、コンパイルにより、理解できないエラーが発生します。それを手伝ってくれませんか?

エラー:

0 投票する
1 に答える
1198 参照

c++ - イテレータなしでブースト マルチインデックス コンテナにアクセスする

これが新しい質問である場合は申し訳ありませんが、次のコードを検討してください。

たとえば、コンテナ内の 10 番目の要素にアクセスしたいと思います。まだイテレータを使用する必要がありますか? または、配列のような方法で特定のシーケンス要素にアクセスするために離れています(または他の方法で...提案してください)

0 投票する
1 に答える
1338 参照

c++ - ブーストmulti_index_containercomposite_keyで1つのキーにequal_range、別のキーに下限/上限

私が次のものを持っているとしましょう:

これにより、各イテレータが「01/15/65」に生まれた「Bob」という名前の人物を指すイテレータ範囲が得られます。

「Bob」という名前のコンテナ内のすべての人に「 01/01/65」と「01/31/65」の間に生まれたイテレータ範囲が必要な場合はどうなりますか?これは事実上「ボブ」ではequal_rangeですが、誕生日では下限と上限です。これは可能ですか?もしそうなら、どのように説明してください?

ありがとう!

0 投票する
2 に答える
865 参照

c++ - 1 つのインデックスがコレクション全体のサブセットであるマルチインデックス

1つsequencedのビューからのみ値を削除できる、2 つのビューを持つマルチインデックスを構築したいと考えています。

コード内:

このようなことは可能boost::multi_indexですか?

0 投票する
2 に答える
425 参照

c++ - 複数のルックアップ セット

データ構造が必要ですが、何を選択すればよいかわかりません。基本的に、私のニーズは と似ていますがstd::set、同じデータを同時に複数の異なるコンパレーターに従って検索する必要があることを除きます。

今、私はいくつかのクラッジに行くことに決めました-a、std::map<float, std::unordered_set<T>>そしてstd::unordered_map<T, std::unordered_set<T>*>. これにより、 a の O(log N) ルックアップと a のfloatO(1) ルックアップ/削除が許可されTます。

使用するより良いデータ構造はありますか? これには「ハック」と書かれています。

余談ですが、このコードかなりパフォーマンスが重要なので、何か速いものがあれば非常にありがたいです。

編集:私は突っついてboost::multi_indexきましたが、これが私がこれまでに得たものです:

node_comparatorin_scope ラムダです。しかし、それをコンパイルしようとすると、いくつかの輝かしいエラーが発生します。

これは最初だけです。たくさんありますが、1 つのエラーでさらに 9999999 のエラーが発生するという Visual Studio の傾向を十分に認識しています。

0 投票する
1 に答える
2370 参照

c++ - ブーストマルチインデックスの読み取り専用要素を変更する方法は?

ブーストマルチインデックスコンテナ要素を変更できないことに気づきました。これは本当ですか?(次の簡略化されたコードに基づく)「更新」関数を見てください。

プログラム全体を実行する必要はありません。updateメソッドで、次のエラーが発生することに注意してください。multiIndex $ c ++ exp2.cpp exp2.cpp:メンバー関数'void sim_mob :: Phase :: update(double)':exp2.cpp:69:29:エラー:読み取り専用オブジェクトでのメンバー'sim_mob :: linkToLink::currColor'の割り当て

ブーストチュートリアル で、イテレータはconstアクセスのみを許可することを読みました。この問題を回避するにはどうすればよいですか?ご協力ありがとうございました

0 投票する
2 に答える
593 参照

c++ - ブーストmulti_indexインターフェースを返すときのC++でのconstの混乱

変数のconst操作に問題があります。問題を次のプログラムに簡略化しました。

変数a1が定数でなければならないと仮定すると、次のようにコンパイルエラーが発生します。

問題の解決にご協力いただければ幸いです。ありがとうございます

0 投票する
2 に答える
830 参照

java - JavaLinkedHashSetインデックスの有効性

私はJavaコードの大部分をC++に移植してきましたが、LinkedHashSetのようなものを実装する必要がありました。Boostのマルチインデックスコンテナを使用して、LinkedHashSet/Mapの妥当な複製を作成しました。

コードを移植しているときに、multi_indexを使用していくつかの興味深いものに遭遇します。これは、含まれているオブジェクトが変更可能ではないためです(クラスの特定のフィールドを変更可能としてマークしない限り)。ただし、含まれているクラスのいくつかの可変メンバーからキーが計算される場合、物事は興味深いものになる可能性があります。

いくつかのことを明確にするために、Javaで簡単な例を書いてLinkedHashSetの動作を確認すると思いました。結果は私には少し驚くべきものです。含まれているオブジェクトが変更されてもインデックスが再生成されないという点で、Boostのマルチインデックスコンテナのように動作するようです(ご想像のとおり)。ただし、コンパイラはまったく文句を言いません---足元で自分を撃つのは非常に簡単なようです(私が移植しているコードは、それがまだどのように機能するかを知っている前述の罪を犯しているようです)。

これは、Javaにconst_iteratorsがないことの単なる制限ですか、それとも私は特に愚かでトリッキーなことをすることができましたか?

簡単な例を次に示します。

次のように出力されます。

興味深いことに、それはバズが変わったことを知っています。ただし、それでもBaz2は見つかりません。

明らかにこれは不自然ですが、私が見ている非常にもっともらしいコードは(複数の間接的な方法で)この問題を引き起こしているようです。Boost Multi Indexでは、少なくともこれを引き起こすにはイテレータをconst-castする必要があります!

0 投票する
1 に答える
2622 参照

c++ - ハッシュされた一意のインデックスへのマルチインデックスアクセスを強化

このコードは、ブースト多重指数「mru」の例から採用されています。

http://www.boost.org/doc/libs/1_46_1/libs/multi_index/example/serialization.cpp

boost :: unordered_mapと同様のことをしているコードがありますが、この例からmru機能を追加したいと思います。

このコードをできるだけboost::unordered_mapに近づけて機能させたいと思います。私にとって重要な機能は、unordered_mapの[]演算子です。

main()の最後の行は壊れており、コメントとして各行の上にあるのが私の質問です。

すべての回答コメントに事前に感謝します。

0 投票する
1 に答える
1165 参照

c++ - 固定サイズの多重指数多重指数コンテナの多重指数をブースト

まだC++/ boostを掘り下げているので、コメント/フィードバックは大歓迎です。

私はboost::unordered_mapsで遊んでいて、図形を使用して多形の例を作成しました。頭を包み込んだ頃(ほとんど)、boostmulti_indexのmruの例に出くわしました。 http://www.boost.org/doc/libs/1_46_1/libs/multi_index/example/serialization.cpp

その時点で私は思った。うーん、LRUに基づいて値を破棄する固定サイズのマルチインデックスポリモーフィックコンテナで、実装しないのはおかしなことに聞こえます。

たくさんのことをやり遂げた後、私はまだ次の質問を残されています。

  1. insert()で、シーケンスイテレータからhashed_uniqueイテレータを取得して、eraseを直接呼び出す方法はありますか?

  2. findを実装するより良い方法はありますか?ルックアップのためだけにダミーの形状を作成する代わりに、キーだけを使用してboost::unordered_mapのような検索を実行できれば便利です。

  3. get <>の正しいパスは何ですか(コードのXXXコメントを参照)私は正しいことをすべて試した後、ランダムながらくたを試し始めましたが、何もパンアウトされませんでした。

  4. 本当に[]演算子が欲しいのですが、それは道のりだと思います... shape [cptr1-> pos] = cptr1;

  5. 私のhash_index::iteratorからアイテムを取得する(または一般的にこれを理解する)にはどうすればよいですか、それを印刷することは確かに役に立ちませんでした...

p itr $ 1 = {、std :: allocator >>>、boost :: multi_index :: detail ::bucket_array >>>、boost :: shared_ptr、long、boost :: shared_ptr const *、boost :: shared_ptr const&>> = {、std :: allocator >>>、boost :: multi_index :: detail ::bucket_array >>>、boost :: shared_ptr const *、boost :: iterator、long、boost :: shared_ptr const *、boost :: shared_ptr const& > >> = {、std :: allocator >>>、boost :: multi_index :: detail ::bucket_array >>>、boost :: shared_ptr const *、boost :: iterator、long、boost :: shared_ptr const *、boost :: shared_ptr const&> >> = {、std :: allocator >>>、boost :: multi_index :: detail ::bucket_array >> >>、boost :: incrementable、std :: allocator >>>、boost :: multi_index: :detail ::bucket_array >>>、boost :: dereferenceable、std :: allocator>>>、boost :: multi_index :: detail ::bucket_array >>>、boost :: shared_ptr const *、boost :: iterator、long、boost :: shared_ptr const *、boost :: shared_ptr const&>> >>> = { 、std :: allocator >>>、boost :: multi_index :: detail ::bucket_array >>>、boost :: dereferenceable、std :: allocator >> >>、boost :: multi_index :: detail ::bucket_array >>>、 boost :: shared_ptr const *、boost :: iterator、long、boost :: shared_ptr const *、boost :: shared_ptr const&>> >> = {、std :: allocator >> >>、boost :: multi_index :: detail :: bucket_array >>>、boost :: shared_ptr const *、boost :: iterator、long、boost :: shared_ptr const *、boost :: shared_ptr const&> >> = {、long、boost :: shared_ptr const *、boost :: shared_ptr const&>> = {、long、boost :: shared_ptr const *、boost ::shared_ptr const&>> = {、long、boost :: shared_ptr const *、boost :: shared_ptr const&>> = {}、}、}、}、}、}、}、}、}、node = 0x60a010、buckets = 0x7fffffffdd88 }