map<int, string>::reverse_iterator& it = temp.rbegin();
it
-> указывает на значение ключа мусора
it++
-> указывает на правильное значение ключа
map<int, string>::iterator& it = temp.begin();
it
-> указывает на правильное значение ключа от начала.
Пожалуйста помогите.
Ваши утверждения неверны. Если temp
тогда не пусто *temp.rbegin()
действительно последнее значение на карте, и *temp.begin()
это первое значение.
(Тем не менее лежащий в основе Итератор обратного начала — это обычный конечный итератор, но вы не увидите этого, если не вызовете base()
на обратном итераторе.)
У вас должна быть ошибка в вашем коде, который заполняет карту. Вы можете убедиться в этом, протестировав тривиальный пример, такой как
#include <algorithm>
#include <map>
#include <iostream>
using namespace std;
int main()
{
map<int, char> coll;
// insert elements from 1 to 9
for (int i=1; i<=9; ++i) {
coll[i] = static_cast<char>(i+'a'-1); // because adding 96 is less obvious that we're indexing based at letter a
}
// print all element in reverse order
for_each (coll.rbegin(), coll.rend(),
[]( pair<int, char> mapinfo ) { cout << mapinfo.second << " "; } );
cout << endl;
}