У меня есть следующий пример программы:
#include <iostream>
#include <string>
#include <map>
int main()
{
std::map<int, int> a;
a[8] = 1;
a[5] = 1;
a[1] = 1;
a[2] = 1;
std::cout << a.begin()->first << std::endl;
std::cout << a.rbegin()->first << std::endl;
std::cout << (++a.rbegin())->first << std::endl;
std::cout << (--a.rbegin())->first << std::endl;
std::cout << (a.lower_bound(6))->first << std::endl;
}
Когда я ее выполняю, я получаю следующий вывод:
1
8
5
5
8
У меня два вопроса.Во-первых, почему ++a.rbegin()
и --a.rbegin()
повторяются в одном и том же направлении?Является ли итератор, возвращаемый из a.rbegin()
, не двунаправленным итератором?
Второй вопрос: почему a.lower_bound(6)->first
возвращает 8 вместо 5?Основываясь на https://en.cppreference.com/w/cpp/container/map/lower_bound,, он должен возвращать итератор к первому элементу «не меньше ключа».Так что я бы подумал, что 5 будет возвращено с 8> 6.