我使用map迭代器时遇到了问题,我希望有人可以为我解决这个问题。
基本上,我需要在我拥有的地图中返回最后10个键,所以我尝试了这个:
for (map<int, char>::iterator i = (singleCountSwitched.end()); i != (singleCountSwitched.end()-10); --i) {
cout << (*i).first << ": " << (*i).second << endl;
}
然而它给了我以下错误:
main.cpp:150:112: error: no match for ‘operator-’ in ‘singleCountSwitched.std::map<_Key, _Tp, _Compare, _Alloc>::end<int, char, std::less<int>, std::allocator<std::pair<const int, char> > >() - 10’
似乎表示不支持 - 运算符(使用map.begin()+ 10时抛出了类似的消息)。我错误地使用了迭代器吗?我认为STL容器的迭代器应该都超载了+'s和-s。
答案 0 :(得分:2)
map<int, char>::reverse_iterator r_it_end = singleCountSwitched.rbegin();
map<int, char>::reverse_iterator r_it_begin = singleCountSwitched.rbegin();
std::advance(r_it_begin, 10);
你也可以使用普通迭代器的advance(size() - 10)
我认为这是一个更好的
map<int, char>::reverse_iterator r_it_begin = singleCountSwitched.rbegin();
std::advance(r_it_begin, 10);
for (map<int, char>::iterator it = r_it_begin.base(); it != singleCountSwitched.end(); ++it)
{
}
答案 1 :(得分:0)
看起来map :: iterator是一个双向迭代器,它支持递增/递减但不支持某些int的算术加法/减法(与支持后者的随机访问迭代器相比)。
http://www.cplusplus.com/reference/map/map/end/
为什么不减少10次?