Итератор ошибки map.end() не разыменовывается С++

//Works    
cout << "map[0] value is " << doubleStatsMap.begin()->first<< endl;
//gives error
cout << "map[last value is " << doubleStatsMap.end()->first << endl;

Я просто пытаюсь получить значение последнего элемента моей карты. Он корректно работает с "map.begin->first", но дает "итератор карты/набора, не подлежащий разыменовыванию" для "map.end()->first". Он не может быть пустым, так как у карты есть начало, а значит, и конец. Все, что я читал, говорит, что это должно работать. Любые предложения с благодарностью!


person Mason    schedule 23.08.2017    source источник


Ответы (1)


Попытка получить что-либо из итератора end приводит к неопределенному поведению.

Чтобы получить последний элемент, вы можете использовать std::map::rbegin().

// cout << "map[last value is " << doubleStatsMap.end()->first << endl;
cout << "map[last value is " << doubleStatsMap.rbegin()->first << endl;
person R Sahu    schedule 23.08.2017
comment
БЛАГОДАРЮ ВАС. Меня не волнует, если меня заминусуют за этот вопрос. Я видел примеры конца, и это сводило меня с ума. - person Mason; 24.08.2017
comment
так какой смысл привязывать первую и вторую функции к end(). кроме того, какой смысл даже иметь конечную функцию с [плохо названным] в любом случае, поскольку на карты все равно нельзя ссылаться как на массивы по индексу? - person Mason; 24.08.2017
comment
@ Мейсон, хорошие вопросы. Ответы на них длинные и неуместные в комментарии SO. - person R Sahu; 24.08.2017
comment
@Mason end не плохо назван - почитайте о полуоткрытых диапазонах. Также прочитайте это: stackoverflow.com/questions/13066884/ (особенно принятый ответ). - person Jesper Juhl; 24.08.2017