从第二个值(int)获取映射中的第一个值(字符串)

时间:2019-05-14 17:22:57

标签: c++ dictionary stdmap

如果您有一个std :: map,它需要一个字符串和一个整数。

    std::map<std::string, int> exampleMap;

如果您具有正确的int,有什么方法可以打印字符串?

假设我在地图中插入了字符串“ hello”和int 0:

    exampleMap.insert(std::make_pair("hello", 0));

要打印0,我们可以使用:

    exampleMap.find('hello')->second;

有什么方法可以打印“ hello”字符串?

3 个答案:

答案 0 :(得分:2)

您可以按顺序遍历地图中的所有条目,直到找到具有以下值的条目:

for (auto &it : exampleMap)
{
    if (it.second == value)
        return it.first;
}

尽管您需要决定如果有多个具有相同int值的条目该怎么办,以及如果没有找到int怎么办。

答案 1 :(得分:1)

  

假设我在地图中插入了字符串“ hello”和int 0:

 exampleMap.insert(std::make_pair("hello", 0));
     

有什么方法可以打印“ hello”字符串?

您需要进行迭代以找到具有期望值的项以打印密钥

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

int main()
{
  std::map<std::string, int> exampleMap;

  exampleMap.insert(std::make_pair("hello", 0));
  exampleMap.insert(std::make_pair("how", 1));
  exampleMap.insert(std::make_pair("are", 2));
  exampleMap.insert(std::make_pair("you", 0));

  int expected = 0;

  for (std::map<std::string, int>::const_iterator it = exampleMap.begin();
       it != exampleMap.end();
       ++it) {
    if (it->second == expected)
      std::cout << it->first << std::endl;
  }
}

编译和执行:

pi@raspberrypi:/tmp $ g++ -pedantic -Wall -Wextra m.cc
pi@raspberrypi:/tmp $ ./a.out
hello
you
pi@raspberrypi:/tmp $ 

答案 2 :(得分:1)

您有几种选择...

  1. 创建两张地图(一张从字符串到整数,另一张从另一张去)
  2. 您可以使用"Bi-Directional" map,这将使您双向使用。 Boost也有an implementation
  3. 您可以使用a function like this one从一张地图转换为另一张地图。

选择哪一个取决于您需要两次查找的频率。如果很少,我会使用转换功能。如果不是罕见的话,我会使用双向容器。