問題タブ [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 に答える
2081 参照

c++ - ネストされた値に基づくインデックスでマルチインデックスコンテナをブースト

私がこのようなオブジェクトを持っている場合:

次のように、マルチインデックスコンテナを作成できます。

しかし、私がこのようなクラスを持っている場合:

オブジェクト.bar().property()のコンテナのインデックスを作成するにはどうすればよいですか?Foo

通常、への呼び出しをネストboost::bindしますが、マルチインデックスコンテナのコンテキストでそれを機能させる方法を理解できません。

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

c++ - boost :: multi_index_containerwithrandom_accessおよびordered_unique

boost::multi_index_containerランダムアクセスとorderd_uniqueを同時に使用する際に問題が発生します。(長い質問で申し訳ありませんが、例を使用する必要があると思います。)

次に例を示します。ファクトリでN個のオブジェクトを作成し、オブジェクトごとに満たす必要があるとします(この要求は、マルチインデックスの作成時にわかります)。さて、私のアルゴリズム内で、次のクラスに保存する中間結果を取得します。

オブジェクトが生成されるベクトルpartsdescibes(その長さはNであり、辞書式順序で私のcorespデマンドベクトルよりも小さいです!)-そのようなベクトルごとに、used_timeも知っています。さらに、生成されたオブジェクトのこのベクトルの値を取得します。

すべてのオブジェクトを生成できないように、別の制約があります。アルゴリズムintermediate_resultでは、データ構造に複数のオブジェクトを格納する必要があります。そして、ここboost::multi_index_containerで使用されます。これは、とのペアが一意partsused_time記述しているためですintermediate_result(そして、データ構造内で一意である必要があります)がmax_value、アルゴリズムは常にintermediate_result最高のを必要とするため、これは考慮しなければならない別のインデックスmax_valueです。

そこで、「parts&used_time-pair」と(異なるオブジェクトが同じ値を持つ可能性があります)にを使用してみましたboost::multi_index_containerordered_unique<>ordered_non_unique<>max_valueintermediate_result

問題は次のとおりです。どの「parts&used_time-pair」が小さいかを判断するために必要な述語は、std::lexicographical_compare私のparts-vectorで使用するため、多くのオブジェクトで非常に低速ですintermediate_result。しかし、解決策があります。各オブジェクトに対する私の需要はそれほど高くないので、可能な各部分に格納できます。中間結果をそのによって一意にベクトル化しますused_time

たとえば、デマンドベクトルがある場合は、可能なパーツベクトル( 2 , 3 , 1)を格納するデータ構造が必要です。(2+1)*(3+1)*(1+1)=24そのようなエントリごとに、一意である必要がある異なるused_timesが必要です。(最小の時間を保存するだけでは不十分です。たとえば、追加の制約が次の場合:本番環境で特定の時間を正確に満たすため)

random_access<>しかし、 -indexと-indexを組み合わせるにはどうすればよいordered_unique<>ですか?
Example11はこれについては役に立ちませんでした。)

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

c++ - ブーストマルチインデックス:ハッシュインデックスのベクトルと整数の複合キー

他の質問で学んだように、aと整数composite_keyを持つ構造体にaを使用できます。std::vector今私の質問は:hashed_indeciesを操作するためにこれをどうにかして使用できますか?

これに似た例を次に示します

問題は(もちろん)astd::vector<int>が適切なハッシュキーではないということです。このコードをエレガントなラッパー(またはそのようなもの)に入れて、のすべてのエントリからハッシュキーを生成することはmy_vecできますか?

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

c++ - hashed_unique_indexでマルチインデックスをブーストするとコンパイラエラーが発生します

このスレッドでは、intと。をhashed_unique<>使用してインデックスを使用する方法を学びました。しかし、残念ながら、次のコードはかなりのエラーメッセージを生成します。composite_keystd::vector<int>

1> boost/multi_index/hashed_index.hpp(439) : error C2784: 'size_t .. composite_key_hash<...>::operator ()(const boost::tuples::tuple<...> &) const' :テンプレート引数を推測できませんでしたfor 'const boost::tuples::tuple<...> &' from 'const unique_property'

ここにコードがあります、誰かが何が悪いのか知っていますか?:-?

完全なエラーメッセージは次のとおりです。

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

c++ - Boost Multi-Index で複数のインデックスを検索

boost::multi_index以前の検索の結果で検索を制限するにはどうすればよいですか? 例として、次のような内部値を持つ長方形クラスがあるとします。

そして、「与えられた-その長方形に含まれ、最も高い値を持つinput_rectangleオブジェクトはどれですか?」のようなクエリに答えるには、そのようなオブジェクトのデータ構造が必要です。MyRect

次のように「multi_index」を使用できます。

input_rectangle幅がある場合、次のinput_widthようなものを使用できます。

しかし、coresp の高さの検索を、与えられた 2 つの反復子で制限するにはどうすればよいでしょうか? (その後、その結果で最も高い値を持つオブジェクトを見つけますか?)

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

c++ - 挿入の順序を保持するC++ハッシュマップ

私は次のコードを持っています:

ただし、後で挿入されたのと同じ順序で要素を反復処理できるように、順序を保持するものを探しています。私のコンピューターでは、上記のコードは順序を保持せず、次のように出力します。

多分私は使用できると思いましたboost::multi_index_container

イテレータが挿入の順序に従うように、このコンテナ(または他の適切なコンテナ)を使用して元のコードを実装する方法を誰かに教えてもらえますか?

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

c++ - Boost.MultiIndex:効果的な集合交差を作成する方法は?

data1とがあると仮定しdata2ます。どうすればそれらを交差させることができstd::set_intersect()ますか?

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

c++ - 定数式のテンプレート:VC++2008でエラーC2975

私はメタプログラミングの要素を使おうとしていますが、最初の試行で壁にぶつかりました。次のように使用できるコンパレータ構造が欲しいのですが。

どこ:

私が欠けているものは何ですか?

アーマンよろしくお願いします。

申し訳ありませんが、エラーメッセージ全体をコピーしませんでした。完全なエラー:

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

replace - multi_index composite_key をイテレータに置き換える

boost::multi_index でインデックスをループして置換を実行する方法はありますか?

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

boost - multi_indexordered_unique中央値をブースト

Ordered_uniqueインデックスを持つブーストmulti_indexコンテナから中央値をすばやく取得したいのですが、インデックスイテレータはランダムアクセスではありません(これはstd :: setと一致していますが、なぜできないのかわかりません) ...)。

イテレータcontainer.size()/ 2倍をインクリメントする以外に、これを行うためのより高速で適切な方法はありますか?