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实例存储在 a setormultiset与仅通过键进行比较的比较运算符中。然后您可以正常迭代以使它们按排序顺序排列。

于 2013-01-02T20:30:35.340 回答
0

当您希望映射中的一个键指向多个值,所有值都属于同一类型时,可以使用 Multimap。

于 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

您可以使用 multiset 而不是 multimap,因为 key 是您的课程的一部分:

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 回答