我正在尝试为 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 ?我试图使其尽可能易于更新和维护,而不会涉及太多额外的类型定义等。感谢您的见解。
尝试直接使用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" );
请注意使用“关系”而不是“值类型”。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)