1

たとえば、私はクラスを持っています

Class foo {
    key  &KEY;
    element 1 v1;
    element 2 v2;
    element 3 v3;
};

Key を使用してクラスのイテレータをソート/通過し、1-3 から Class 要素を取得したいと考えています。これを行う最良の方法は何ですか?次のようなものを使用できますか

multimap <int, unsigned, string, unsigned>;
multimap < Key, element 1, element 2, element 3> m;

または上記の機能を達成するためにこのようなものはありますか?

4

4 に答える 4

1

キーのみで比較する比較演算子またはを使用して、fooインスタンスを格納するだけです。次に、通常どおり反復して、並べ替えられた順序で取得できます。setmultiset

于 2013-01-02T20:30:35.340 に答える
0

Multimap は、マップ内の 1 つのキーが複数の値 (すべて同じ型の値) を指すようにする場合に使用することを意図しています。

于 2013-01-02T20:29:36.817 に答える
0

ここにアイデアがあります:

struct Foo_Values
{
  element1 e1;
  element2 e2;
  element3 e3;
};

struct Foo
  : public Foo_Values
{
  key Key;
};

typedef std::map<key, Foo_Values> Map_Type;

マップに挿入するには:

Map_Type my_map;
key some_key;
//...
Foo_Values v;
key k = some_key.Key;
v = static_cast<Foo_Values>(k); // Copy the elements.
my_map[k] = v;
于 2013-01-02T20:38:20.127 に答える
0

key はクラスの一部であるため、multimap の代わりに multiset を使用できます。

class foo {
    friend bool operator < (const foo & l, const foo & r) 
    {
       return l.KEY < r.KEY;
    }

    key  &KEY;
    element 1 v1;
    element 2 v2;
    element 3 v3;
};

multiset<foo> MySet;

// Assigning values to MySet . . .

// Traversing the elements in the set:
multiset<foo>::iterator  it = MySet.begin();
for(;it != MySet.end() ; it++) {
    cout<< "element 1 = "<<it->v1<< ", element 2 = "<<it->v2<<", element 3 = "<<it->v3<<endl;
}
于 2013-01-02T20:38:45.987 に答える