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