問題タブ [intrusive-containers]

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 に答える
2124 参照

c++ - boost::intrusive::map がないのはなぜですか?

ブーストのドキュメント ( http://www.boost.org/doc/libs/1_55_0/doc/html/intrusive.html ) には、list(シングル/ダブル リンクの両方で)setおよびmultiset. マップの実装が見つかりませんでした。それにはもっと深い理由がありますか、それとも実装を待っているだけですか?

0 投票する
0 に答える
77 参照

c++ - shared_ptr のパフォーマンス リスト

私は持っている:

  1. クラスX
  2. boost::X の unordered_map
  3. X のリスト - タイムスタンプに従って要素をタイムアウトするために使用されます

  4. リストから要素をパフォーマンスで挿入および削除する必要があります。私は侵入型リストを使用していましたが、要素はすべてのリストを通過せずにリストから削除できます。

  5. リークしないようにXをshared_ptrでラップしたい...

shared_ptr が intruive ptr と互換性がないことを発見しました。
1. 他に提案はありますか?

2 つのインデックス (ハッシュと順序付け) で shared_ptr の multi_index を使用するのが最善の解決策かもしれませんが、私はそれを使用できません。

2.要素を削除するために、マルチインデックスで順序付けされたインデックスは効率的ですか?

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

c++ - boost::intrusive Q2を学習しようとしています

これらのコメントを外すと

ループの外側で、クラッシュするループの内側のものをコメントアウトします。ベースリスト (およびメンバーリスト) をループの外に置くことができる必要があります。これはどのように達成されますか?

編集

私が最も単純な形で解決しようとしている実際の問題はこれです。

の std::vector がMyClass必要です。これを AllThingsBunchedTogether と呼びます。の std::vector も必要ですBaseList。これを AllThingsSpreadOut と呼びます。

そう

  • AllThingsBunchedTogether には次のものが含まれる場合があります (anInt1コンパクトにするための部分のみ): 1,2,1,10,2,3,4,4,5,9,10,10.
  • AllThingsSpreadOut には、 [1] 1,1at [2] 2,2at [3] 3at [4] 4,4at [5] 5at [9] 9at [10]が含まれている可能性があります (ゼロは今のところ使用されていません) 10,10,10

数値自体は に保存されませんがBaseList、たとえばMyClass(1, "John") に保存されることに注意してください。

[1] では「Mike」、「John」、[2] では「Mike」、「Dagobart」、[3] では「John」、[10] では「John」「Mike」」 Dagobart" などで、BaseListAllThingsSpreadOut[i]のいずれにも重複がないようにします。これはMyClass、それぞれの BaseListハッシュが異なる値になるためです ( anInt1 + Name)。

本質的に、anInt1MyClassAllThingsSpreadOut 内のどこに存在するかを示しますが、anInt1 + name各 内での一意性を保証しますBaseList

つまり、AllThingsSpreadOut は、BaseListBaseListベクトル位置が類似するもののリストであるベクトルであるということです。

次に、AllThingsBunchedTogether から物を削除すると (クリアではなく、以下のコードの IsMarkedToDelete のようにいくつかのアイテムを削除する検索によって)、それらは対応する AllThingsSpreadOut から自動的に消えます。

AllThingsSpreadOut は、押し付けがましいセマンティクスで、AllThingsBunchedTogether の並べ替えとして機能します。AllThingsBunchedTogether は、[] を介した超高速アクセスを可能にします。

編集を終了

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

c++ - boost::intrusive を学習しようとしている Q3 - IC にポインタを格納する場合、smart_pointer を使用する必要がありますか?

侵入型コンテナの理解が大幅に進みました。「しばらく」実行し、次のようなコード行で実行するプログラムがあります delete *it; (下記参照):

このスタック トレースでプログラムがクラッシュします。

プログラムはマルチスレッドではありませんが、しばらくは問題なく実行されるため、これは奇妙なバグです。何が起こっているのかわかりませんが、smart_pointers を使用する必要があるのでしょうか?

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

c++ - 侵入型コンテナのイテレータに新しい値を割り当てる

押し付けがましいコンテナー splay_set の作業中に、ローカル イテレーター メンバー変数をリセットする必要があります。以下のサンプルコードを参照してください -

侵入型コンテナは割り当てをサポートしていないと思います。splay_setまた、メンバー初期化子リストを介してイテレータを初期化することもできません。ブーストや他のサイトには非常に限られた例があります。この質問に対する明確な答えはありません。

私の質問は、新しい値を splay_set イテレータに割り当てるにはどうすればよいかということです (一般的には、侵入型のコンテナに)。

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

c++ - slist 'node_ptr' を自分のノード タイプに変換する方法

nodeから継承する次のものを宣言しましたboost::intrusive::slist_base_hook<>

これらのノードを含むリストの宣言:

InputBufferSglListメンバー関数からルートノードを取得したいので、実行しようとしまし
InputBufferSglNode* node = this->get_root_node();
たが、エラーが発生しました:

にキャストnode_ptrする必要がありInputBufferSglNode*ますか? どのキャスティングですか?

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

c++ - Boost Intrusive でフックを複製する方法は?

Boost Intrusive ライブラリを学習しています。STL コンテナーをコピーしようとすると問題が発生します。std::vector を使用します。list_base_hookモードのクラスの要素が含まれていますauto_unlinkが、ノード ( ) に関する情報はis_linked()、コピー コンストラクターを呼び出すと失われます。

次のコードがあります。

標準出力:

ベクトルcopy_nodesがリンクされていないのはなぜですか?

ありがとうございます。