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

rub*_*nvb 24 c++ stl map bimap c++11

在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

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

ild*_*arn 37

简答:不.

答案很长:不.


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

*猜测,而不是统计

  • 我不知道为什么会这么受欢迎 - 我认为一个更好的"长答案"将简要解释为什么它不被视为必要; 什么是更惯用的方法.我认为很多人(我当然有罪)在他们试图以非常C++的方式共同攻击某些东西时偶然发现了Boost; 我认为OP希望避免学习它是好的(尤其是因为我分享它). (19认同)
  • 那么透明比较器如何帮助定义枚举< - >字符串bimap?这会使这个答案真正回答我的问题.目前,它看起来像一个C++ 14功能的浅层广告,没有任何有用的指示. (8认同)
  • 然后这个答案不是这个问题的答案,即使我知道如何应用于这种情况,我也同意你的观点. (5认同)
  • @OllieFord:这是一个相当诙谐的笑话,因为"不"太短,不能发布自己的答案.; - ] (3认同)
  • 如果我错了,请纠正我,但不是Bimap &lt;T,U&gt;的主要用例,它不能针对T和U执行*有效*的搜索(有效指的是log n复杂度)?这涉及对T和U元素使用两种索引结构。使用透明比较器无法实现这一点。 (3认同)
  • @CygnusX1:这也是我来这里的目的。这个答案是题外话,根本没有很好地解释其背后的想法。 (3认同)
  • @ildjarn:我敢打赌他们也错过了你想要表达的观点。如果我见过的话,这是一个低质量的答案。 (3认同)
  • @ildjarn您建议如何使用上述“透明比较器”功能来保持插入顺序的高效可搜索索引?假设一个容器存储唯一整数,同时还跟踪插入顺序 (2认同)

Cli*_*ton 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)其余元素.

  • “你不需要它,你只需要实现它” (4认同)
  • 这不应该是std:map &lt;Y,X *&gt;和std :: map &lt;X,Y *&gt; (3认同)