我有一个包含一对字符串和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";
}
答案 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,它将会失败。