問題タブ [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++ - boost::multi_index_container の find() メソッドに const 引数を使用できない
次のように、クラスのメンバーにインデックスを付ける非常に単純なマルチ インデックス コンテナーがあります。
基本クラス:
multi_index_container を宣言するクラス:
私の問題はgetAgentInfo()
、一種のアクセサメソッドです。エラーは明らかです:
Agent*
コードベースの他の部分から取得しているため、非定数を入力できません。使いたくない
const_cast
.find()
定数エージェントを使用してメソッドを呼び出す方法はありますか? ありがとうございました
c++ - boost::multi_index_container - equal_range 値
ブースト プロセス間ライブラリとマップを使用していくつかのソリューションを試し、現在は共有メモリ内の multi_index_container を使用しています。multi_index_container では、equal_range から返された値を反復処理する以外に方法はありますか。non_unique インデックス (ST0012345 などのステーション名) から結果のサブセットを取得し、必要な実際の測定タイプ (温度など) を見つけて取得したいと考えていました。
測定値をデータ ヒストリアンに挿入するには、測定ポイントの一意の pointID 値 (例: ST0012345SMD10000456.VoltsA = pointID - 45789) を取得する必要があります。メッセージペイロードには配列内の1つのステーションの〜100〜200の測定値が含まれているため、multi_index_containerのアイデアが好きだったので、500,000以上のアイテムを含む共有メモリコンテナを1回呼び出して、長い一意の文字列名を使用した、はるかに小さなリスト。
私が行った読み取りから、get/find を実行するのではなく、multi_index_container から返された小さなリストを反復処理することしかできないようです。
その場合、元の共有メモリ マップ ソリューション (私が取り組んでいる) に固執するほうがよいでしょうか。これには、データ ヒストリアンが必要とするポイント ID を取得するために照合する 500,000 個以上の長い文字列が含まれています。1 秒あたり 200 ポイントが処理される高いデータ レートがあります (テスト環境では、データ マップ ルックアップが 1 秒あたり 2000 ルックアップに達することがわかりました)。
また、マップを使用する場合、共有メモリに複数のマップがあることに害はありますか。たとえば、シドニー駅のマップ (~300,000 ポイント)、ニューカッスル駅のマップ (~200,000 ポイント) などです。
以下は、multi_index_container を作成した別のプロセスからアイテムを取得する私のプログラムのコードです。
}
c++ - stl/boost アルゴリズムとコンテナーを使用して、SQL (またはその他の rdbms) の機能をシミュレートする
私はしばらくstlを使用してきましたが、SQLを知り始めたばかりです。
stl/boost コンテナーとアルゴリズムを使用して SQL 機能をシミュレートできますか? そうでない場合、制限はどこから始まりますか?
たとえば、std::vector<std::unordered_map<std::string>>
boost multi-index を使用するだけでデータベースを作成できます。
次に、SQL 操作をアルゴリズムで模倣できます。
- WHERE -- std::copy_if
- 結合 -- std::set_union
遅延評価を使用してクエリの最適化を行うことができる場合があります。
SQLがRAMにないことは理解しています。ただし、データベースがそれほど大きくない場合はそれほど重要ではありません。さらに、stxxl もあります。
だから私の質問は主に、いつstl/boostの使用をやめてsqlに切り替えるのですか?
boost - boost::multi_index コンテナのイテレータ機能の射影の複雑さ
boost::multi_index ライブラリ内のイテレータの射影の複雑さについて何か知っている人はいますか? ドキュメントはここboost::multi_index project of iteratorsにありますが、操作の複雑さについては述べていません。
基本的な考え方は、インデックス内のオブジェクトへの反復子を取得し、これを 2 番目のインデックスに射影して、2 番目のインデックス内の同じオブジェクトへの反復子を取得できるというものです。これが O(1) 操作の場合、効率的に 2 つのインデックスを維持できます。1 つは高速で検索可能で、もう 1 つは低速です。私が理解しているように、反復子の射影により、インデックス内でより高速に検索されるオブジェクトを見つけて、それを検索速度の遅いインデックスに射影することができます。
イテレータの射影のための単純な O(1) ルックアップなのか、それとも 2 番目のインデックスで検索操作を効果的に開始するだけなのか、したがって射影先の特定のインデックスに依存して遅くなるのかを知りたいと思っています。 O(1) よりも。
助けてくれてありがとう!
c++ - std::unordered_map - いつでも最大/最小キーを「追跡」する方法
私は持っていstd::unordered_map<int, int>
ます。ツリーなどの他の構造は使用したくありませんが、遅延要件が発生するものは何もありません。しかし、いつでも現在の最大キーと最小キーを知る必要があります。どうやってやるの?分布は均一ではなく、代わりに最大値と最小値が頻繁に削除および挿入されます。したがって、「現在の最大値/最小値が削除されたときに、マップ全体をスキャンして新しい最大値/最小値を取得する」よりもスマートなものが必要です。
私は他の構造を使用したくありません。使いたいstd::unordered_map
!
そのような構造を作成した答えに従ってupd:
c++ - 既存のマルチ インデックス コンテナーにインデックスを追加する
私は現在 Boost::multi_index_container を使用しており、うまく機能しています。ただし、コードをカプセル化し、次のようなテンプレート クラスを作成したかったのです。
基本的に、このラッパーで使用される事前定義されたインデックスがありますが、特殊な T の場合は、追加のインデックスも追加したいと考えています。に追加のインデックスを追加することは可能myTable
ですか? 多分追加のテンプレート引数?しかし、追加のインデックスの数は不明です。