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 に答える