C ++:不匹配运算符&lt;当试图迭代boost :: unordered_map <string,int> </string,int>时

时间:2012-10-24 12:11:32

标签: c++ boost unordered-map boost-iterators boost-unordered

我有以下代码:

boost::unordered_map<std::string, int> map;
map["hello"]++;
map["world"]++;

for(boost::unordered_map<std::string, int>::iterator it = map.begin(); it < map.end(); it++){
    cout << map[it->first];
}

当我尝试编译时,我得到以下错误,但不明白为什么?

error: no match for ‘operator<’ in ‘it < map.boost::unordered::unordered_map<K, T, H, P, A>::end [with K = std::basic_string<char>, T = int, H = boost::hash<std::basic_string<char> >, P = std::equal_to<std::basic_string<char> >, A = std::allocator<std::pair<const std::basic_string<char>, int> >, boost::unordered::unordered_map<K, T, H, P, A>::iterator = boost::unordered::iterator_detail::iterator<boost::unordered::detail::ptr_node<std::pair<const std::basic_string<char>, int> >*, std::pair<const std::basic_string<char>, int> >]()

2 个答案:

答案 0 :(得分:4)

尝试:

it != map.end()

作为for循环终止条件(而不是it < map.end())。

答案 1 :(得分:3)

如果是迭代器,则必须使用!=运算符:

boost::unordered_map<std::string, int>::iterator it = map.begin();
for(; it != map.end(); ++it){
    cout << map[it->first];
}

你不能使用<因为迭代器指向内存,你不能保证内存是连续的。这就是你必须使用!=比较的原因。