31

在 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

我只是在寻找一个干净且简单的解决方案(一个头文件/源文件或一些额外的文件,因为在我的情况下,两个镜像映射同样适用)。

4

2 回答 2

33

简短的回答:没有。

长答案:不。


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

*一个猜测,而不是统计数据

于 2011-04-13T09:56:46.560 回答
14

我的感觉是进入 Boost 库的很多工作是让它们与其他库/STL 一起工作。

如果您不需要该功能,则可以使用带有std::map<X*, Y*>and的类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)其余元素的析构函数。

于 2011-04-14T01:04:40.837 回答