問題タブ [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.
c++ - boost::intrusive::map がないのはなぜですか?
ブーストのドキュメント ( http://www.boost.org/doc/libs/1_55_0/doc/html/intrusive.html ) には、list
(シングル/ダブル リンクの両方で)set
およびmultiset
. マップの実装が見つかりませんでした。それにはもっと深い理由がありますか、それとも実装を待っているだけですか?
c++ - shared_ptr のパフォーマンス リスト
私は持っている:
- クラスX
- boost::X の unordered_map
X のリスト - タイムスタンプに従って要素をタイムアウトするために使用されます
リストから要素をパフォーマンスで挿入および削除する必要があります。私は侵入型リストを使用していましたが、要素はすべてのリストを通過せずにリストから削除できます。
- リークしないようにXをshared_ptrでラップしたい...
shared_ptr が intruive ptr と互換性がないことを発見しました。
1. 他に提案はありますか?
2 つのインデックス (ハッシュと順序付け) で shared_ptr の multi_index を使用するのが最善の解決策かもしれませんが、私はそれを使用できません。
2.要素を削除するために、マルチインデックスで順序付けされたインデックスは効率的ですか?
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,1
at [2]2,2
at [3]3
at [4]4,4
at [5]5
at [9]9
at [10]が含まれている可能性があります (ゼロは今のところ使用されていません)10,10,10
。数値自体は に保存されませんが
BaseList
、たとえばMyClass
(1, "John") に保存されることに注意してください。[1] では「Mike」、「John」、[2] では「Mike」、「Dagobart」、[3] では「John」、[10] では「John」「Mike」」 Dagobart" などで、
BaseList
AllThingsSpreadOut[i]のいずれにも重複がないようにします。これはMyClass
、それぞれのBaseList
ハッシュが異なる値になるためです (anInt1 + Name
)。本質的に、
anInt1
はMyClass
AllThingsSpreadOut 内のどこに存在するかを示しますが、anInt1 + name
各 内での一意性を保証しますBaseList
。つまり、AllThingsSpreadOut は、
BaseList
各BaseList
ベクトル位置が類似するもののリストであるベクトルであるということです。次に、AllThingsBunchedTogether から物を削除すると (クリアではなく、以下のコードの IsMarkedToDelete のようにいくつかのアイテムを削除する検索によって)、それらは対応する AllThingsSpreadOut から自動的に消えます。
AllThingsSpreadOut は、押し付けがましいセマンティクスで、AllThingsBunchedTogether の並べ替えとして機能します。AllThingsBunchedTogether は、[] を介した超高速アクセスを可能にします。
編集を終了
c++ - boost::intrusive を学習しようとしている Q3 - IC にポインタを格納する場合、smart_pointer を使用する必要がありますか?
侵入型コンテナの理解が大幅に進みました。「しばらく」実行し、次のようなコード行で実行するプログラムがあります delete *it; (下記参照):
このスタック トレースでプログラムがクラッシュします。
プログラムはマルチスレッドではありませんが、しばらくは問題なく実行されるため、これは奇妙なバグです。何が起こっているのかわかりませんが、smart_pointers を使用する必要があるのでしょうか?
c++ - 侵入型コンテナのイテレータに新しい値を割り当てる
押し付けがましいコンテナー splay_set の作業中に、ローカル イテレーター メンバー変数をリセットする必要があります。以下のサンプルコードを参照してください -
侵入型コンテナは割り当てをサポートしていないと思います。splay_set
また、メンバー初期化子リストを介してイテレータを初期化することもできません。ブーストや他のサイトには非常に限られた例があります。この質問に対する明確な答えはありません。
私の質問は、新しい値を splay_set イテレータに割り当てるにはどうすればよいかということです (一般的には、侵入型のコンテナに)。
c++ - slist 'node_ptr' を自分のノード タイプに変換する方法
node
から継承する次のものを宣言しましたboost::intrusive::slist_base_hook<>
。
これらのノードを含むリストの宣言:
InputBufferSglList
メンバー関数からルートノードを取得したいので、実行しようとしまし
InputBufferSglNode* node = this->get_root_node();
たが、エラーが発生しました:
にキャストnode_ptr
する必要がありInputBufferSglNode*
ますか? どのキャスティングですか?
c++ - Boost Intrusive でフックを複製する方法は?
Boost Intrusive ライブラリを学習しています。STL コンテナーをコピーしようとすると問題が発生します。std::vector を使用します。list_base_hook
モードのクラスの要素が含まれていますauto_unlink
が、ノード ( ) に関する情報はis_linked()
、コピー コンストラクターを呼び出すと失われます。
次のコードがあります。
標準出力:
ベクトルcopy_nodes
がリンクされていないのはなぜですか?
ありがとうございます。