C++ - 在地图中搜索所有具有相同值的键的最快方法是啥?

Posted

技术标签:

【中文标题】C++ - 在地图中搜索所有具有相同值的键的最快方法是啥?【英文标题】:C++ - What is the fastest way to search for all the keys with same value in a map?C++ - 在地图中搜索所有具有相同值的键的最快方法是什么? 【发布时间】:2017-09-28 09:20:31 【问题描述】:

假设我们有一个初始化的地图:

const std::map<int, std::string> map = 
     0, "A" ,
     1, "B" ,
     2, "A" ,
     3, "A" ,
     4, "C" ,
     5, "A" ,
    // ...
;

在存在 1 到 1000 个值的情况下,检索与值 "A" 关联的所有键的最快方法是什么?

【问题讨论】:

地图多地图组合。只有内存才能为执行速度买单。 define "fastest method":最快的写、读、编译、运行..? 【参考方案1】:

您可以使用 Boost.Bimap。 Boost.Bimap 是 C++ 的双向地图库。使用 Boost.Bimap,您可以创建关联容器,其中两种类型都可以用作键。

【讨论】:

出于 OP 的目的,它应该是 boost::bimap &lt;int, boost::bimap::multiset_of &lt;std::string&gt; &gt;【参考方案2】:

如果std::map 的值不包含索引,您只能这样做:

#include <iostream>
#include <map>
#include <string>

int main()

    const std::map<int, std::string> map = 
         0, "A" ,
         1, "B" ,
         2, "A" ,
         3, "A" ,
         4, "C" ,
         5, "A" ,
    ;

    for (const auto& pair : map) 
        if (pair.second == "A") 
            std::cout << '' << pair.first << ", " << pair.second << "\n";
        
    

【讨论】:

以上是关于C++ - 在地图中搜索所有具有相同值的键的最快方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

具有单个键的多个值的STL集合

如何使用包含Swift中相同键的多个值的查询参数构建URL?

Java找到具有特定值的所有键[重复]

使用 keyof 提取仅具有特定类型值的键的字符串文字联合

具有相同键的(嵌套)字典的 Pythonic 替代方案?

红黑二叉搜索树中的几何搜索