【问题标题】:In multimap, how to get the key associated to a given value?在 multimap 中,如何获取与给定值关联的键?
【发布时间】:2016-04-07 20:37:17
【问题描述】:

我有我的multimap<int, std::string> map,它表示某些值的优先级,如下所示(按优先级降序排列):

<1, "element1"> // max priority
<1, "element2">
<1, "element3">
<2, "element4">
<3, "element5">
<3, "element6"> // min priority

有没有办法给定一个值字符串“elementx”来确定它与哪个键(因此优先级)相关联?

【问题讨论】:

  • 如果给定值有多个键怎么办?
  • 对于我的代码是如何设置的,这不应该发生:每个元素都有一个唯一的优先级。
  • 那为什么不直接使用std::map呢?
  • 我想我误解了我在文档上读到的内容!然后我将使用std::map。但是这个问题可能对某人有用,我是否应该删除它?
  • @elmazzun std::map 对你不起作用,因为它每个键只允许一个值,并且每个键有一个或多个值。

标签: c++ c++11 multimap


【解决方案1】:

您在构建地图时需要一个反向地图&lt;string, int&gt; map(以便更快地搜索),或者只需通过迭代器浏览您的地图:

for (auto it:map)
{
    if (it.second == "elementx")
    {
         std::cout << it.first << std:endl;
         break;
    }
}

【讨论】:

  • 请记住 'auto it:map' 按值复制...您可能希望 auto&amp; it:map 避免复制这些字符串...
【解决方案2】:

您不能按值搜索std::map

您唯一的选择是遍历整个地图并将地图中每个项目的值与"elementx" 进行比较。您可以将密钥收集在合适的容器中,例如 std::set

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多