【问题标题】:<operator missing when iterating through c++ map< 遍历 c++ 映射时缺少运算符
【发布时间】:2009-06-25 06:08:16
【问题描述】:

下面的代码不想编译。请参阅包含的错误消息。

代码:

#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> >]()'

我之前多次使用过这种类型的地图和迭代过程。这里有什么问题?怎么解决。

(代码看起来毫无意义,但这是一个简化的示例,应该仍然可以工作)

【问题讨论】:

    标签: c++ map iterator


    【解决方案1】:

    在迭代器比较中使用 != 而不是

    【讨论】:

      【解决方案2】:

      operator

      我猜这背后的原因是这些神秘的编译器错误迫使你重新思考你的代码并自己实现 operator

      【讨论】:

        猜你喜欢
        • 2011-11-06
        • 2016-04-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-25
        • 1970-01-01
        • 2020-04-16
        相关资源
        最近更新 更多