0

2番目のパラメーターがペアとして定義されたstlマップを使用した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は単なる文字列と整数ですが、なぜ機能しないのですか?

4

2 に答える 2

9

それは真実でfirstはありませんunsigned intsecondpair<string,int>ですが、マップのイテレータはペアを直接与えるのではなく、カップルのキー、値を与えるためです。

私はあなたがすべきだと思います

pair<string,int> pair = (*it).second;
cout << pair.first << "  " << pair.second << endl;
于 2012-04-12T17:19:32.120 に答える
1

あなたの(* it).secondはペアです、あなたは持っている必要があります

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

これは、マップを反復処理するときにペアを取得し、次に最初がキーで、2番目が値であるためです。この場合もペアです。

于 2012-04-12T17:23:38.480 に答える