2017-02-08 15 views
5

IDとして値が格納され、キーとしてマークされているマップの実装があります。これにより、マップの自動ソートを利用できるようになり、最高のマークを持つ要素のIDを識別できるようになります。標準ライブラリのrbeginとend関数の違い

for(map<int, int>::iterator i = marks.begin(); i != marks.end(); ++i) 
    cout << i->first << "\t" << i->second << endl; 
cout << marks.rbegin()->second << endl; 
cout << marks.end()->second << endl; 

この出力を生成する:

312 3 
420 4 
512 2 
752 1 
1 
420 

入力シーケンスは、値の昇順でした。 end()に "1​​"が表示されず、入力された最後のペアのキーが表示されるのはなぜですか? rbegin()end()の違いは何ですか?

+3

これは質問には触れませんが、余分なものが必要な場合を除き、 'std :: endl'を使用しないでください。 '' \ n ''は行を終わらせます。 –

+1

フィードバックの書式設定のリクエストについて:自分の編集を参照してください:-)テキストの絵を使用しないでください。 – Angew

答えて

12

rbeginは実際にはコンテナの最後の要素です。 endは、であり、1つ前のものは、である。

したがってmarks.end()->secondは未定義の動作です。

+0

ああ!それはそれを説明する。ありがとう! – Naman

+1

また、 'rbegin()'と 'rend()'は、逆イテレータを返します。これは[通常のイテレータと比較して後方に動作します](http://coliru.stacked-crooked.com/a/8fcf0408635e5cc8)。 –

関連する問題