問題タブ [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 Q5を学習しようとしています
私は次のプログラムを持っています。Linuxでgcc-4.9.2でビルドしました。私の質問は次のとおりです。
1) ハッシュテーブルが最初はソートされているように見えるのに、アイテムが値から削除された後にソートが失われるのはなぜですか?
2) ハッシュテーブルをキーで自分で調べて、バケットにハッシュする各項目 (セクションのコードなど) を std::cout と言うにはどうすればよいthe #if 0 #endif
ですか?
c++ - 基になるデータは同じだが、データのビューが異なる 2 つ以上のコンテナ
以下の MyClass は、2 つの方法で非常に高速に検索できるようにするために必要なデータ構造を表しています。したがって、MyClass を std::vector に保存して、その中の類似の名前をすばやく削除して継続的に挿入できるとします。しかし、anInt に基づいて MyClass の内容をソートできる必要もあります。それは、侵入型のコンテナ (またはマルチマップ) が [非常に可能性が高い] ソートされていない std::vector の内容をソートする場所です。同じ基礎となるアイテムに対して 2 つの非常に異なる役割を実行する 2 つのコンテナー。また、std::vector からアイテムを削除すると、侵入型コンテナからも自動的に消えてしまいます。
これが一種のアイデアです
c++11 - Boost.Intrusive と fast_pool_allocator
これを言うと、後で奇妙なコンパイラ (gcc4.9、ブースト 1_58) エラーが発生します。
この IL にアクセスするとき:
これを行う正しい方法は何ですか?
c++ - C++で2つのブースト侵入セットをマージしますか?
一緒にマージする必要がある 2 つのブースト侵入セットがあります。押し付けがましいセットをブーストmap_old.m_old_attributes
するためにマージする必要がある押し付けがましいセットがありますm_map_new_attributes
これを行う最善の方法は何ですか?マージを実行できる関数が見つかりませんか? 最近、boost intrusive セットの使用を開始しましたが、マージを実行できる定義済みのメソッドを見つけることができませんでしたか、それとも間違っているのでしょうか?
c++ - メンバーのメモリ オフセットを確認するために、クラスは標準レイアウト タイプである必要がありますか?
押し付けがましいリストを書きたいとしましょう。ノードとして使用するメンバーへの型とポインターを受け取る侵入型のリスト クラス テンプレートがあります。おおよそ次のようになります。
リストに保存したいものごとに IntrusiveListNode があります。その IntrusiveListNode を IntegerListNode のように使用できるものに戻すには、クラス内のオフセットに基づいてノードでポインタ演算を行う関数を呼び出し、それを適切な型にキャストします。これは機能しているように見えますが、保証されていないと思います。
使用している型が安全であることをコンパイル時に検証するクラスに static_assert を追加できるようにしたいのですが、static_assert の条件がどうなるかわかりません。これは、IntrusiveListNode を保持する型が標準レイアウト クラスである場合にのみ機能することが保証されていると思いますが、標準レイアウト型の要件は実際に必要以上に厳しいように見えるため、確信が持てません。
特に、標準レイアウト タイプでは、すべてのメンバーが同じアクセス コントロールを持つ必要があります。私が必要としているのは、ポインター演算が機能することを確認できることだけです。つまり、構造体の 2 つの異なるバージョンが異なるレイアウトになる可能性があるため、ポリモーフィック型でこれを使用できないことを意味しますが、型にプライベート データ メンバーとパブリック データ メンバーが混在している場合、これは問題になりませんよね? 型が非ポリモーフィックであることを要求しただけで安全でしょうか? または、行うべきより良いチェックがありますか?それとも、私はis_standard_layout
チェックをしているのですか?
c++ - このタイプのテンプレート引数の意味は何ですか - `ClassAT::*ELEM`?
最近、侵入リストのコンテキストでこのコードに出くわしました。
ブースト侵入型リスト ライブラリ( member_hook<class T, class Hook, Hook T::* PtrToMember>
) にも同様のコードがあります。
私の質問は、テンプレート引数に関するものNode<T> T::*NODE
です。私は C++ の専門家ではありませんが、この特定の構文にこれまで出会ったことがなく、理解するために何を検索すればよいかわかりません。
どういう意味ですか?その目的は何ですか?「NODE は T に属するノードへのポインタです」と解釈する必要がありますか? T には事前に特定のメンバーが含まれていることがわかっておらず、私の知る限り、::
スコープを解決するために使用されるため、これは私には意味がありません。
同様に、誰かが*NODE
この行での使用を明確にすることができれば、たとえば : Node<T> *node = &(elem->*NODE);
、これが何のために使用されているかを理解するのに役立ちます.
c++ - boost::instrusive::list と auto-unlink フック: リスト内の値を使用して、リストに要素が 1 つだけあるかどうかを判断できますか?
フックから継承する がありますboost::intrusive::list<Foo, constant_time_size<false>>
。list elementを使用すると、 を呼び出してイテレータを取得できます。私の質問は、このイテレータを使用してリストをトラバースする方法です。特に、この要素がリスト内の唯一のものであるかどうかを確認する方法はありますか?Foo
list_base_hook<auto_unlink>
foo
list::s_iterator_to(foo)
ソースは、その値の特性でlist
a を使用することを示唆しcicular_list_algorithms
ています。おそらく、次のテストを使用できますか?
それはかなりハックに見えますが、一見うまくいきます。それが正しく慣用的なものかどうかはわかりません。誰かアドバイスしてくれませんか?
完全なリスト:
Yes, I do realize dereferencing ++itr1
and --itr1
is wrong. Is there any way that I can compare the addresses of the underlying nodes directly? I imagine foo
has both links to its predecessor and successor and they should be equal to each other if foo
is the only element.