作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试为 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 一起使用,还是需要另一种类型?
这些映射都是基本的(枚举、字符串)类型。
其次,有没有办法仍然可以像上面那样以简单的方式将映射定义为常量?我正在努力使它尽可能易于更新和维护,而不会涉及太多额外的 typedef 等。感谢您的见解。
最佳答案
尝试直接使用 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" );
请注意使用“关系”而不是“值类型”。
关于c++ - 用于枚举的 boost::bimap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10745664/
我是一名优秀的程序员,十分优秀!