C++ <;遍历c+;时缺少运算符+;地图

C++ <;遍历c+;时缺少运算符+;地图,c++,map,iterator,C++,Map,Iterator,以下代码不希望编译。请参阅包含的错误消息 代码: #包括 #包括 #包括 类地图持有者{ 公众: std::map mu map; 无效漫游地图(){ std::map::it迭代器; for(it=m_-map.begin();itsecond.print(); } } void print() 我猜这背后的原因是,这些神秘的编译器错误迫使您重新思考代码,并自行实现运算符

以下代码不希望编译。请参阅包含的错误消息

代码:

#包括
#包括
#包括
类地图持有者{
公众:
std::map mu map;
无效漫游地图(){
std::map::it迭代器;
for(it=m_-map.begin();itsecond.print();
}
}

void print()

我猜这背后的原因是,这些神秘的编译器错误迫使您重新思考代码,并自行实现运算符<,如果您发现这是解决问题的最佳方法

#include <map>
#include <vector>
#include <iostream>

class MapHolder {
public:
    std::map<std::vector<std::string>,MapHolder> m_map;

    void walk_through_map() {
        std::map<std::vector<std::string>,MapHolder>::iterator it;
        for(it = m_map.begin(); it < m_map.end(); ++it) {
            it->second.print();
        }
    }

    void print() { std::cout << "hey" << std::endl; }
};

int
main(int argc, char *argv[])
{
    MapHolder m;
    m.walk_through_map();
}
$ g++ test.cc -O test
test.cc: In member function 'void MapHolder::walk_through_map()':
test.cc:12: error: no match for 'operator<' in 'it < ((MapHolder*)this)->MapHolder::m_map.std::map<_Key, _Tp, _Compare, _Alloc>::end [with _Key = std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, _Tp = MapHolder, _Compare = std::less<std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >, _Alloc = std::allocator<std::pair<const std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, MapHolder> >]()'