0

key_typeとmapped_typeを持つstd::mapがあります。マップされたタイプのすべてのインスタンスは、3つの異なるキー値の下で3つのコピーとしてマップに挿入されます。これにより、3つのキーのいずれかに基づいて値を取得できます。

ただし、欠点は、アイテムを削除するときに、3つのコピーすべてを削除するために、1つではなく3つのキーを探す必要があることです。

厳密な弱順序を維持しながら、3つのキーを1つのクラスに構成し、そのようなオブジェクトを1つのキーと比較することは可能ですか?このようなシナリオでは、operator <はkey_typeに対してどのように見えますか?

編集:3つのキーは同じタイプです。たとえば、1つのレコードに3つの異なる整数値でアクセスできます(これらのキー値は他のレコードでは使用されません)。したがって、私が理解していることから、Boost.MultiIndexはこの問題の解決策ではありません。

4

2 に答える 2

2

Boost.MultiIndex を使用します。http://www.boost.org/doc/libs/1_49_0/libs/multi_index/doc/tutorial/basics.html#multiple_sortを参照してください。

于 2012-06-20T15:39:26.207 に答える
1

1 つのオブジェクトにカプセル化された 2 つのデータ構造を使用することをお勧めします。

  • std::list<Node> list;
  • std::map<Key, std::list<Node>::iterator> map;

含まれる場所Node:

  • Value value;
  • および 3 つのインスタンスstd::map<Key, std::list<Node>::iterator>::iterator i1, i2, i3;

次に、適切な簿記で値を挿入および削除して、構造の一貫性を保つことができます。

于 2012-06-20T17:31:56.037 に答える