【问题标题】:How to traverse a map by value如何按值遍历地图
【发布时间】:2011-12-09 06:25:57
【问题描述】:

说有地图:typedef map<int, string> MyMap;

我想通过字符串来遍历,例如:

3 -> a
1 -> b
7 -> b
2 -> c

一种方法是按地图的值对地图进行排序。但是我担心这会对 find() 效率产生影响(是真的吗?)

另一种选择是使用boost::bimap。但是,您可能会注意到,MyMap 中的值不是唯一的,因此 bimap 在这里不适用。

有什么好的方法吗?

【问题讨论】:

    标签: boost stl map traversal bimap


    【解决方案1】:

    我找到了在 boost.bimap 中使用多个值的解决方案:multiset_of

    数据定义改为:

    #include <boost/bimap/multiset_of.hpp>
    typedef boost::bimap<int, boost::bimaps::multiset_of<std::string> > MyMap;
    

    现在我可以通过键或值来遍历我的数据。

    【讨论】:

    • 如果你不想排序遍历,你可以像typedef boost::bimap&lt;unordered_set_of&lt;int&gt;, unordered_multiset_of&lt;std::string&gt; &gt; MyMap;这样把它变成无序的,这样查找速度会更快
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-16
    • 2011-10-08
    • 1970-01-01
    • 2011-03-23
    • 2011-06-18
    相关资源
    最近更新 更多