1

我有一个map<string, list<int> >我想遍历列表并打印出每个数字。我不断收到关于 const_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

您的mapisconst或您的 map 是 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 回答