6

我正在尝试为 C++ 中的枚举创建一个简单的双向查找工具。我有单向查找工作正常...

enum MyEnum
{ 
    One, 
    Two, 
    Three 
};

const boost::unordered_map<MyEnum,std::string> MyEnumMap = map_list_of
    (One, "One")
    (Two, "Two")
    (Three, "Three");

然后通过

MyEnumMap.at(One)

这有效,但它只允许基于键的查找。我想使用双向查找容器,例如 boost:bimap 来允许基于值和键的简单反向查找。不过,map_list_of 似乎与 boost::bimap 不兼容。

首先,我应该仍然使用带有 boost::bimap 的 map_list_of,还是需要其他类型?
这些地图都将是一个基本的(枚举,字符串)类型。

其次,有没有办法我仍然可以像上面那样简单地将地图定义为 const ?我正在尝试使其尽可能易于更新和维护,而不会涉及太多额外的 typedef 等。感谢您的洞察力。

4

1 回答 1

13

尝试直接使用 list_of :

typedef boost::bimap< MyEnum, std::string > bm_type;
const bm_type MyEnumMap =
  boost::assign::list_of< bm_type::relation >
    ( One, "One" )
    ( Two, "Two" )
    ( Three, "Three" );

注意使用“relation”而不是“value_type”。

于 2012-05-24T22:45:55.587 回答