2017-02-08 79 views
5

Mam implementację mapy, w której identyfikator jest zapisywany jako wartość i jest oznaczany jako klucz. Dzięki temu mogę skorzystać z automatycznego sortowania na mapach i mogę zidentyfikować identyfikator elementu z najwyższymi ocenami.Różnica między funkcją rbegin a funkcją końca w bibliotece standardowej

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; 

dała następujący wynik:

312 3 
420 4 
512 2 
752 1 
1 
420 

sekwencji wejściowej był rosnące wartości. Dlaczego end() nie wyświetla "1", ale zamiast tego wyświetla klucz ostatniej wprowadzonej pary? Jaka jest różnica między rbegin() i end()?

+3

To nie odpowiada na pytanie, ale nie używaj 'std :: endl', chyba że potrzebujesz dodatkowych rzeczy, które on robi. '' \ n'' kończy linię. –

+1

Odnośnie Twojego żądania sformatowania opinii: zobacz moje zmiany :-) Nie używaj zdjęć tekstu. – Angew

Odpowiedz

12

rbegin to tak naprawdę ostatni element Twojego kontenera. end jest jeden koniec koniec pojemnika.

Tak marks.end()->second jest niezdefiniowanym zachowaniem.

+0

Ah! To wyjaśnia to. Dzięki! – Naman

+1

Również 'rbegin()' i 'rend()' zwracają odwrotny iterator, który [działa wstecz w porównaniu do normalnych iteratorów] (http://coliru.stacked-crooked.com/a/8fcf0408635e5cc8). –