我有一个带有stl map的c ++代码,第二个参数被定义为一对
int keys[10] = {1, 1, 1, 2, 3, 4, 5, 7, 6, 6};
char s[5];
map< unsigned int, pair<string, int> > tmpMap;
for (int i=0; i<10; i++)
{
if (tmpMap.find(keys[i])==tmpMap.end())
{
sprintf(s, "%i", keys[i]);
tmpMap.insert(make_pair(keys[i], make_pair(s, 1)));
}
else tmpMap[keys[i]].second++;
}
for (map< unsigned int, pair<string, int> >::iterator it=tmpMap.begin(); it!=tmpMap.end(); ++it)
{
cout << (*it).first << " " << (*it).second << endl;
}
但它没有编译,它说,没有匹配运算符&lt;&lt;。但是(* it).first和(* it).second只是字符串和int,为什么它不起作用?
答案 0 :(得分:9)
这不是真的,first
是unsigned int
,而second
是pair<string,int>
,因为地图的迭代器不直接给你这对,但这对夫妻键,值
我想你应该做
pair<string,int> pair = (*it).second;
cout << pair.first << " " << pair.second << endl;
答案 1 :(得分:1)
你的(*它)。第二个是对,你需要
cout << (*it).first << " " << (*it).second.first << " " <<
(*it).second.first << endl;
这是因为当迭代地图时,你得到对,然后第一个是关键,第二个是值 - 在你的情况下也是一对。