0

我在使用地图迭代器时遇到了问题,我希望这里有人可以为我解决。

基本上,我需要返回我拥有的地图中的最后 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 容器的迭代器应该都重载了 + 和 -。

4

2 回答 2

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);

您还可以使用带有 (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)
{
}
于 2013-05-20T00:41:04.397 回答
0

看起来 map::iterator 是一个双向迭代器,它支持递增/递减,但不支持某些 int 的算术加法/减法(与支持后者的随机访问迭代器相比)。

http://www.cplusplus.com/reference/map/map/end/

为什么不直接递减 10 倍?

于 2013-05-20T00:54:13.113 回答