在c ++ 11中是否有Boost.Bimap替代方案?

时间:2011-04-13 09:52:08

标签: c++ stl map c++11 bimap

在C ++ 0x中有没有可用的替代Boost的bimap?

我想避免使用Boost,但完全接受C ++ 11。如果有必要的话,在我的程序中,Boost的bimap的精简版本对我有用(我需要一个恒定的bimap来在枚举和相应的字符串之间切换)。地图将是编译时常量,因此即使是两个手动维护的地图也不是最佳解决方案。

谢谢!

更新:我在代码项目中找到了这个,但似乎许可可能是一个问题:http://www.codeproject.com/KB/stl/bimap.aspx?fid=12042&df=90&mpp=25&noise=3&sort=Position&view=Quick&fr=151#xx0xx

我只是在寻找一个干净简单的解决方案(一个标题/源文件或一点额外,因为在我的情况下,两个镜像地图同样好)。

2 个答案:

答案 0 :(得分:41)

简答:不。

答案很长:不。


应该注意的是,C ++ 1 4 transparent comparators的支持消除了对Boost.Bimap的需求90%的时间 * :当您需要键入对象(存储或计算)的任何给定属性时,通常一个简单的,按位可比的唯一标识符,无论如何都存在于对象中。使用透明比较器,您可以将对象与任何可能的值进行比较,只能按类型进行区分,只要可以从对象获取/计算所述值而不进行变更即可。

* 猜测,而不是统计

答案 1 :(得分:11)

我的感觉是Boost库中的很多工作都使它们与其他库/ STL一起工作。

如果您不需要该功能,则可以使用包含std::map<X*, Y*>std::map<Y*, X*>的课程。然后使用以下方法:add(X,Y)remove(X,Y)get_left(X)get_right(Y)

如果要存储副本,add(X,Y)可以分配内存,remove(X,Y)可以解除分配。此外,您可以定义一个析构函数,在其余元素上调用remove(X,Y)