它无法将 c++ 映射结构编译为 map<A、pair<B、C> >

It fails to compile a c++ map structure as map<A, pair<B, C> >

本文关键字:lt gt pair map c++ 映射 编译 结构      更新时间:2023-10-16

我有一个带有 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;
}

但它无法编译,它说,没有匹配运算符<<。但是(*it).first和(*it).second只是字符串和int,为什么它不起作用?

这不是真的,first是一个unsigned int,而second是一个pair<string,int>,因为映射的迭代器不会直接给你一对,而是给你一对键,值。

我想你应该这样做

pair<string,int> pair = (*it).second;
cout << pair.first << "  " << pair.second << endl;

你的(*it).second是一对,你需要有

cout << (*it).first << "  " << (*it).second.first << " " << 
(*it).second.first << endl;

这是因为在遍历地图时,你会得到对,然后第一个是键,第二个是值 - 在你的例子中也是一对。