我需要一个映射,它可以有两个不同数据类型的键,但指向相同的结构。
struct DataStruct {
SomeEnum keyEnum; // <---- key as enum
std::string keyString; // <----- a key as a string
int arbitrarydata;
int moredata;
}
然后我想要一个 std::map
我可以像这样查找:
std::map<SomeEnum||std::string, DataStruct> dataMap;
dataMap[SomeEnum::AValue] = dataStruct1;
dataMap["mykey"] = dataStruct2;
这可能吗?还是我需要制作 2 张 map ?看起来很浪费。或者我是否需要重载运算符或其他东西?
最佳答案
您可以使用std::pair
,如下所示:
#include <iostream>
#include <map>
#include <utility>
typedef enum {A, B, C} en;
int main ()
{
en myen = A;
std::map<std::pair<char,int>, int> mymap;
mymap.insert ( std::pair<std::pair<char, int>,int>(std::make_pair('a',myen),200) );
mymap.insert ( std::pair<std::pair<char, int>,int>(std::make_pair('z',30),400) );
// showing contents:
std::cout << "mymap contains:\n";
for (std::map<std::pair<char,int>, int>::iterator it=mymap.begin(); it!=mymap.end(); ++it)
std::cout << "(" << it->first.first << ", " << it->first.second <<
") => " << it->second << '\n';
return 0;
}
不是问题的答案:
请注意,在 C++11 中,您可以使用枚举类
,这通常更有用。
关于C++ Map 具有两个不同值的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23500749/