問題タブ [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 投票する
3 に答える
495 参照

c++ - 小さなデータのビッグデータセットを使用した複数のインデックス作成:スペース効率が悪い?

私はデータベース設計の専門家ではないので、CS用語で翻訳する前に、必要なことをわかりやすく説明します。大きなサブセット(たとえば、約100Moのdouble)をすばやく反復する正しい方法を見つけようとしています。 )データの、潜在的に非常に大きなデータセット(たとえばいくつかのGo)。基本的に4つの整数(キー)と値、単純な構造体(1ダブル1ショート)で構成されるオブジェクトがあります。私のキーは少数の値(数百)しか取ることができないので、データをツリーとして保存するのが理にかなっていると思いました(キーごとに1つの深さ、値は葉であり、少なくとも私の素朴なビューではXMLのXPathに似ています) 。

キー値/それらのキー値の関数に基づいて、リーフのサブセットを反復処理できるようにしたいと思います。フィルタリングするキーの組み合わせは異なります。これは横断検索と呼ばれていると思いますか?
したがって、同じキーをn回比較しないようにするには、理想的には、キーの順列ごとにデータ構造にインデックスを付ける必要があります(12の可能性:!4 /!2)。これboost::multi_index が目的のようですが、smthを見落とさない限り、これを行う方法は、実際にこれらの12のツリー構造を構築し、値ノードへのポインターをリーフとして格納することです。キーに比べて値のサイズが小さいことを考えると、これはスペース効率が非常に悪いと思います。

私が使用すべき設計/データ構造に関する提案、またはこれらのトピックに関する簡潔な教材へのポインタをいただければ幸いです。

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

c++ - Boost.MultiIndex 空間操作

アプリケーション用の空間マップが必要でした。Boost.MultiIndex を見つけました。そのチュートリアル
に従い、型の作成方法を理解しました。

そしてそれに挿入する方法:

xy座標に基づいて値を取得するにはどうすればよいですか? そこに値があるかどうかを確認するにはどうすればよいですか?

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

c++ - Boost::Multiindex と文字列インデックス付き boost::unordered_map

int のトリプレットでアクセスする一意の要素のコンテナーが必要です。各 int は 1.000.000.000 を超える可能性があります。

(実際に埋められるのはこれらの要素のほんの一部であり、実際にはこれらの要素は boost::unordered_map そのものです)。

boost::multiindex (または、おそらく私が知らない他の何か) のような multiindex 配列を持つ方が速いですか?

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

c++ - Boost.MultiIndex:複数のフィールドを使用して要素を検索する

Boost multi_indexコンテナを使用して、2つの整数キーK1とK2に従ってオブジェクトを格納しています。たとえば、最初のインデックスを取得してfind()関数(K2のidemと値Y)を使用することで、「K1 == X」を満たすすべての要素のイテレータを簡単に取得できますが、方法を探しています。 K1==XとK2==Yの両方を満たすすべての要素に対してイテレータを取得します。明らかな解決策は、K1 == Xを満たすすべての要素に対してイテレータを取得し、述語K2==Yを使用してboost::filter_iteratorを構築することです。しかし、Boost.MultiIndexからのみ(おそらくより効率的に)それを行う方法はありますか?

ありがとう

マシュー

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

c++ - multi_index_container および仮想リスト コントロール

multi_index_container で苦労しています。

これは基本的に私が必要とするものです:

  • 仮想リスト コントロール。
  • アイテムを複数の方法で並べ替えます (したがって、multi_index_container を使用したかったのです)。
  • リスト コントロールでのアイテムの並べ替え方法と表示方法に従って、アイテムにランダムにアクセスします。
  • アイテムの元の挿入/記録順序を維持します。
  • リスト コントロール内で項目を移動、挿入、削除します (それに応じてコンテナーを更新します)。

これまで、複数のベクトル/マップを同期して使用してきました (表示リストの位置を実際のデータにマップするなど)。

元のコードの最小限のバージョンを作成しようとしました (または作成を試みました)。

これについて助けてくれてありがとう!:)

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

c++ - BOOSTマルチインデックス

Boost のマルチインデックス コンテナを使用して検索を高速化しようとしていますが、検索に苦労しています。一部のドキュメントは少しわかりにくいと思います。ここに私が持っているものがあります:

したがって、すべての dumbmreport レポートを検索しようとすると、障害をセグメント化します。

私はこれを正しく行っていますか?そのタイプのすべてのレポートを取得するためにループが必要ですか? それとも私はこれを完全に誤用していますか?

ありがとう

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

boost - 共有メモリ内の `boost::multi_index_container` ?

共有メモリ内のマルチ インデックス コンテナのようなものに興味があります。

boost::multi_index_container異なる実行可能ファイルがそのデータを読み書きできるように、たとえば共有メモリに割り当てることは可能ですか? どのように?

ありがとう。

0 投票する
4 に答える
4338 参照

c++ - C ++でハッシュマップの複合キーを持つ

私は持っているデータ構造を持っています、

書名や著者が重複する可能性があるので、複合キーを構築したい。(IDなどの追加の一意のキーを作成できないとしましょう)

データは非常に大きいため、速度を上げるために GCC unordered_map を使用し、次のように構造を構築しました。

一般的にはすべて問題なく動作しますが、特定のキーを参照したい場合に問題が発生します。

たとえば、「数学」というタイトルの本の中で最も評価の高い本を見つけたい、または「トルストイ」の本の平均レートを見つけたいとします。
この場合、キー ペアの 1 つだけを参照することはできないため、これは非常に面倒です。

たまたま見つけboost::multi_indexたのですが、ドキュメントを理解するのに苦労しています。誰かがこれについて何らかのアイデアやガイドラインを持っていますか?

複数のインデックスを作成するためのソリューション、multi_index の簡潔な例、その他のアプローチなど。

ありがとうございました。

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

c++ - Boost::multi_index. より速い解決策?

昨日質問を投稿しましたが、multi_map を使用してこれを解決しました :

これは魅力のように機能しますが、datasrt が十分に大きい場合に問題が発生します。

私のデータ セットは約 10M の大きさで、挿入には順序付きインデックスで +350 秒、ハッシュ インデックス (順序なし) で 80 秒かかります。
これは、25 秒しかかからなかった map(pair, double) データ構造と比較してかなり長い時間です。

誰かが計算速度を改善する考えを持っていますか? メモリ消費は問題ありませんが、速度は私にとって本当に重要です。

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

c++ - boost::multi_index を探索中の SIGSEGV

私はこの segfault を理解するために髪を引っ張ってきましたが、助けを求めることにしました。コンテナーがあり、
ある時点で segfault が発生します。boost::multi_index(string, string, double)

これが私のコードの簡略版です:

このコードはかなりうまく機能しているように見えますが、特定のトークンにヒットした場合にのみクラッシュします (逆に言えば、これがトークンに一致しない場合はクラッシュしません)。これは、コンテナ自体の範囲を超えて
いるために発生すると思いますが、どのように発生する可能性があるのか​​ わかりません。it

GDB エラー メッセージが表示されます。

it->str1()トークンベクトルが原因ではなく、 while 条件を呼び出すと明らかにクラッシュします。どうすればこれを防ぐことができますか? if(it == myContainer.get<str1>().end()) break;すぐ下に追加しようとしまし*it++たが、役に立ちませんでした。
誰か手がかりを教えてくれませんか?
ありがとうございました!