c++ - 用于枚举的 boost::bimap

标签 c++ boost map bimap

我正在尝试为 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/

相关文章:

c++ - 跟踪过程直到完成

c++ - 使用 boost 创建相对路径

c++ - Boost.Python 自定义转换器

serialization - boost 序列化 : archive "unsupported version" exception

c++ - 使用值从映射中删除键值对

c++ - 在 C++ 中声明泛型 istream

c++ - 尝试使用 MinGW 编译 Assembly + C++ : ccqKAvXJ. o :main. cpp :(. text+0x18): undefined reference to `GetMagicNumber'

c++ - 自定义 vector 模板 - 字符串

map - 为什么我的unordered_map自己订购?

java - 如何读取hadoop顺序文件?