编译代码时,safe_iterator.h中发生错误

时间:2014-01-11 06:42:01

标签: c++

好吧,伙计们。我知道我已经发布了这个代码(我现在已经修改了它以前的代码),但似乎还有一些事情发生了,我不想编辑我之前的帖子以包含另一个问题(因为那是针对规则)。

当我编译下面的代码时,我从库中深入收到错误消息

safe_iterator.h: **error: no match for 'operator<' in '(+ __lhs)->__gnu_debug::_Safe_iterator<_Iterator, _Sequence>::base [with _Iterator = std::_Rb_tree_iterator<std::pair<const int, int> >, _Sequence = __gnu_debug_def::map<int, int, std::less<int>, std::allocator<std::pair<const int, int> > >]() < (+ __rhs)->__gnu_debug::_Safe_iterator<_Iterator, _Sequence>::base [with _Iterator = std::_Rb_tree_iterator<std::pair<const int, int> >, _Sequence = __gnu_debug_def::map<int, int, std::less<int>, std::allocator<std::pair<const int, int> > >]()'**

有什么想法吗?请不要对我太苛刻。我有点像n00b。 :)

// Returns the mode (most common element) of an integer array
int mode(int* arrPtr, int size) { 
    assert (size > 0);
    std::map<int,int> M; 
    for (int k = 0; k < size; ++k) 
        M[arrPtr[k]]++;
    std::pair<int,int> maxpair(M.begin()->first, M.begin()->second);
    for (std::map<int,int>::iterator it = M.begin() + 1; it < M.end(); ++it) 
        if (it->second > maxpair.second) maxpair = *it;
    return (maxpair.first);
}

1 个答案:

答案 0 :(得分:0)

迭代器不实现operator<

您应该使用it != end,谨防size为零!