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
呢