Почему unordered_map не имеет rbegin() или rend(), но только begin() и end()
Кажется странным итерацию через unordered_map, с begin(), end() и форвардным итератором.
Если да, то почему у него нет rbegin(), rend() и итераторов с двунаправленным движением?
есть ли какая-либо техническая причина?
Ответ 1
Процитировать от The C++ Standard Library
Обратные итераторы позволяют алгоритмам работать назад, переключая вызов внутреннего оператора инкремента в вызов декремента оператора и наоборот. Все контейнеры с двунаправленными итераторами или итераторы с произвольным доступом (все контейнеры последовательностей, кроме forward_list и все ассоциативные контейнеры) могут создавать обратные итераторы через их функции-члены rbegin() и rend(). Поскольку С++ 11, соответствующие функции-члены возвращают итераторы только для чтения, crbegin() и crend ().
Для forward_lists и неупорядоченных контейнеров не требуется обратная итерация интерфейс (rbegin(), rend() и т.д.). Причина в том, что для реализации требуется, чтобы элементы.
Ответ 2
Он неупорядочен, поэтому порядок, в котором происходит итерация, является (или должен быть) несущественным.