3

尝试迭代地图及其列表成员时出现此错误:

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;                   
}

有什么建议吗?

4

3 回答 3

4

你在这里有一个语法错误:

 list<int>iterator::

应该

 list<int>::iterator

还,

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

应该

(*it).second.begin()
于 2012-05-23T12:56:01.487 回答
1
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;                   
}
于 2013-11-25T11:06:11.293 回答
1

你可以用 - 取消内部 for 循环

    std::copy( it->second.begin(), it->second.end(),
               std::ostream_iterator<int>(std::cout, " ") );

这也意味着您可以摆脱ii.

于 2012-05-23T13:41:15.683 回答