C++ Map 具有两个不同值的键

标签 c++ dictionary key multiple-definition-error

我需要一个映射,它可以有两个不同数据类型的键,但指向相同的结构。

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/

相关文章:

C++ 共享指针。如何更改所有拷贝的基础对象指针?

api - 配置 Silex 防火墙使用 api key 的正确方法

javascript - 如何有效地计算 JavaScript 中对象的键/属性的数量

c++ - 由于抛出异常而超出范围时对象是否被销毁。 C++

c++ - 什么时候使用 uncaught_exception?

c++ - 使用带下标运算符的赋值运算符为 std::map 赋值

python - 使用 python 从多个列表中嵌套字典

javascript - 在 Javascript 中重新排列字典中的键

list - 在 Dart 中, `List.unmodifiable` 是创建一个不可修改的 View ,还是一个全新的独立列表?

python - 从文件中提取数据和信号