【问题标题】:iterating over c++ map<int, list<int>>遍历 c++ map<int, list<int>>
【发布时间】:2012-05-23 12:54:04
【问题描述】:

我在尝试迭代地图及其列表成员时遇到此错误:

error: 'template<class _Category, class _Tp, class _Distance, class _Pointer, class _Reference> struct std::iterator' used without template parameters
invalid use of qualified-name '<declaration error>::ii'
error: 'ii' was not declared in this scope
error: 'struct std::_Rb_tree_iterator<std::pair<const int, std::list<int, std::allocator<int> > > >' has no member named 'second'
error: 'struct std::_Rb_tree_iterator<std::pair<const int, std::list<int, std::allocator<int> > > >' has no member named 'second'

这是代码(之前正确填充了地图):

map<int, list<int> >::iterator it; 
list<int>iterator:: ii;

for(it=this->mapName.begin(); it!=this->mapName.end(); ++it){ 

    cout<<(*it).first<<" { ";
    for(ii = (*it).second().begin(); ii!=(*it).second.end(); ++ii){
        cout<<(*ii)<<" ";
    }
    cout << " }" << endl;                   
}

有什么建议吗?

【问题讨论】:

  • 这行list&lt;int&gt;iterator:: ii;不应该是list&lt;int&gt;::iterator ii;吗?

标签: c++ map iterator


【解决方案1】:

这里有语法错误:

 list<int>iterator::

应该是

 list<int>::iterator

还有,

(*it).second().begin()

应该是

(*it).second.begin()

【讨论】:

    【解决方案2】:

    您可以使用 -

    取消内部 for 循环
        std::copy( it->second.begin(), it->second.end(),
                   std::ostream_iterator<int>(std::cout, " ") );
    

    这也意味着你可以摆脱ii的声明。

    【讨论】:

      【解决方案3】:
      map<int, list<int> >::iterator it; 
      list<int>::iterator ii;
      
      for(it=this->mapName.begin(); it!=this->mapName.end(); ++it){ 
      
          cout<<(*it).first<<" { ";
          for(ii = (*it).second.begin(); ii!=(*it).second.end(); ++ii){
              cout<<(*ii)<<" ";
          }
          cout << " }" << endl;                   
      }
      

      【讨论】:

        猜你喜欢
        • 2020-08-12
        • 2012-05-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-24
        • 1970-01-01
        • 2015-11-30
        • 2018-03-27
        相关资源
        最近更新 更多