C++ 链接到多个参数的键需要什么类型的数据结构

C++ 链接到多个参数的键需要什么类型的数据结构,c++,class,data-structures,map,C++,Class,Data Structures,Map,例如,我有一节课 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, ele

例如,我有一节课

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;
multimap;
多重映射m;

或者类似的方法来实现上述功能?

当您希望地图中的一个键指向多个值,所有值都是同一类型时,可以使用Multimap。

当您希望地图中的一个键指向多个值时,可以使用Multimap,相同类型的所有值。

只需将
foo
实例存储在
set
multiset
中,并使用仅按键进行比较的比较运算符即可。然后您可以正常地进行迭代,以获得排序顺序。

只需将
foo
实例存储在
set
multiset
中,并使用仅按键进行比较的比较运算符即可。然后,您可以正常地进行迭代,以使它们按顺序排列。

这里有一个想法:

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

struct Foo
  : public Foo_Values
{
  key Key;
};

typedef std::map<key, Foo_Values> Map_Type;
struct Foo_值
{
元素1 e1;
元素2 e2;
元素3 e3;
};
结构Foo
:公共Foo_值
{
钥匙;
};
typedef std::map映射类型;
要在地图中插入:

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;
Map\u键入my\u Map;
按一些键;
//...
Foo_值v;
k键=某个_键。键;
v=静态(k);//复制元素。
my_map[k]=v;
这里有一个想法:

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

struct Foo
  : public Foo_Values
{
  key Key;
};

typedef std::map<key, Foo_Values> Map_Type;
struct Foo_值
{
元素1 e1;
元素2 e2;
元素3 e3;
};
结构Foo
:公共Foo_值
{
钥匙;
};
typedef std::map映射类型;
要在地图中插入:

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;
Map\u键入my\u Map;
按一些键;
//...
Foo_值v;
k键=某个_键。键;
v=静态(k);//复制元素。
my_map[k]=v;

您可以使用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;
}
class-foo{
friend bool操作员<(常数foo&l,常数foo&r)
{
返回l键cout您可以使用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;
}
class-foo{
friend bool操作员<(常数foo&l,常数foo&r)
{
返回l键为什么不像
元素v[3]
那样的数组?
std::multimap
为什么不像
元素v[3]
那样的数组?
std::multimap