6

問題は単純です: メンバー a、b、c、d を持つクラスがあります... 迅速に検索 (キーは 1 つのメンバーの値) を行い、a の現在の値を提供することによって新しい値でクラス リストを更新できるようにしたいと考えています。または b または c ... の束を持つことを考えました
std::map<decltype(MyClass.a/*b,c,d*/),shared_ptr<MyClass>>

1) それは良い考えですか?

2) ブースト マルチ インデックスは、この手作りのソリューションよりあらゆる点で優れていますか?

PS SQL は、単純さ/パフォーマンスの理由から問題外です。

4

2 に答える 2

7
  1. Boost MultiIndex には、コレクションの各ミューテーション後にすべてのインデックスを最新の状態に保とうとするという明確な欠点がある場合があります。これは、多数の個別の書き込みを伴うデータ ロード フェーズがある場合、パフォーマンスが大幅に低下する可能性があります。

  2. Boost Multi Index の使用パターンは、プロジェクト (メンバー) のコーディング スタイル (およびテイスト) に適合しない場合があります。これはマイナーな欠点のはずですが、言及したいと思いました

  3. 前述ildjarnのように、Boost MI はまだ移動セマンティクスをサポートしていません

それ以外の場合は、Boost MultiIndex が受け取ったテストの量に達する可能性が低いため、ほとんどの場合、Boost MultiIndex が優れていると考えます.

于 2012-09-26T19:27:42.773 に答える
1

すべてのマップを単一のクラスに含めることを検討し、コンテナーの 1 つを「実際の」オブジェクトを格納するコンテナーとして任意に決定しstd::map、最初の要素への生ポインターのマップされた型でa を使用するだけです。 std::map.

ただし、これらのマップのコピーを作成する必要がある場合、これは少し難しくなります。

于 2012-09-27T01:39:46.083 に答える