如何在地图c ++中获得第二个或第一个术语?

时间:2016-06-23 18:47:04

标签: c++ dictionary

我有一个包含一对字符串和int类型的映射,我有一个整数列表。我正在遍历列表并将其数字转换为地图中各自的字符串。但它没有用。在创建地图时是否需要交换字符串和int,或者还有另一种方法来访问第一和第二项?我知道我可以使用map.at(string)访问地图,但我不知道是否可以使用int进行相同的操作。

  

错误:从'int'到'const key_type&的用户定义转换无效{aka const std :: basic_string&}'

这是我的代码:

map<string,int> cidades;

cidades.insert(pair<string,int>("New York",1));

list<int> l;
l.push_back(1);

printList(l);

void printList(std::list<int> lista) {    

for (std::list<int>::const_iterator iterator = lista.begin(), end = lista.end(); iterator != end; ++iterator) {
    int a = *iterator;

    string city = cidades.at(a);

    std::cout << city << ", ";
}
std::cout<<"\n";

}

1 个答案:

答案 0 :(得分:0)

std::map中,您需要通过键来处理对象,而不是通过它们的值。如果您打算通过地图查找string,那么您应该像这样重写定义:

map<int, string> cidades;
cidades.emplace(1, "New York"); //equivalent to the code you wrote, but shorter, higher 
                                //performance, and easier to maintain, especially if you have to 
                                //make changes like switching the key/value types.

/*...*/
string city = cidades.at(a);

如果您绝对需要根据string对象进行map<string,int>次查找,那么您需要的代码如下所示:

for(const auto & pair : cidades) {
    if(pair.second == a) return pair.first;
}

这对性能非常重要,可能不是一个好的解决方案,因为如果地图对于几个不同的字符串具有相同的int,它将会失败。