提高:: bimap的,枚举(boost::bimap for enum)

2019-07-29 13:03发布

我试图创建在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的兼容,但。

首先,如果我仍然使用map_list_of用的boost :: bimap的,或者需要另一种类型?
这些地图都将是一个基本的(枚举,字符串)类型。

其次,是有办法,我仍然可以定义地图为const在如上一个简单的方法? 我试图让这个容易更新和维护尽可能没有进入太多额外的typedef和这样。 您的见解表示赞赏。

Answer 1:

尝试使用直接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" );

请注意,而不是“VALUE_TYPE”“关系”的使用。



文章来源: boost::bimap for enum