1

map<string, list<int> >リストを反復処理して各番号を出力したいがあります。const_iterator と iterator の間の変換に関するコンパイル エラーが発生し続けます。私はこれで何が間違っていますか?

for (map<string, list<int> >::iterator it = words.begin(); it != words.end(); it++)
{
   cout << it->first << ":";
   for (list<int>::iterator lit = it->second.begin(); lit  != it->second.end(); lit++)
      cout << " " << intToStr(*lit);
   cout << "\n";
}

error: conversion from
  ‘std::_Rb_tree_const_iterator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::list<int, std::allocator<int> > > >’
to non-scalar type
  ‘std::_Rb_tree_iterator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::list<int, std::allocator<int> > > >’
requested|
4

3 に答える 3

4

新しいC++11autoキーワードを使用してみてください

for (auto it = words.begin(); it != words.end(); it++)
{
   cout << it->first << ":";
   for (auto lit = it->second.begin(); lit  != it->second.end(); lit++)
      cout << " " << intToStr(*lit);
   cout << "\n";
}

それでもエラーが発生する場合は、一貫性のないタイプを定義しています。

于 2012-05-04T14:09:23.327 に答える
3
map<string, list<int> >::iterator

する必要があります

map<string, list<int> >::const_iterator

your mapis const、またはマップがaのメンバーでありclass、関数でこのコードを呼び出している場合はconst、も作成されますmap const。いずれにせよ、コンテナーに非constオペレーターを含めることはできません。const

編集:明示的な型を使用することを好むのは私だけautoですか?

于 2012-05-04T14:08:15.133 に答える
3

新しい C++11範囲ベースの for ループを使用してみてください:

for(auto& pair : words) {
  std::cout << pair.first << ":";
  for(auto& i : pair.second) {
    std::cout << " " << intToStr(i);
  }
  std::cout << "\n";
}
于 2012-05-04T14:27:24.120 に答える