Подтвердить что ты не робот

Почему unordered_map не имеет rbegin() или rend(), но только begin() и end()

Кажется странным итерацию через unordered_map, с begin(), end() и форвардным итератором.

Если да, то почему у него нет rbegin(), rend() и итераторов с двунаправленным движением? есть ли какая-либо техническая причина?

4b9b3361

Ответ 1

Процитировать от The C++ Standard Library

Обратные итераторы позволяют алгоритмам работать назад, переключая вызов внутреннего оператора инкремента в вызов декремента оператора и наоборот. Все контейнеры с двунаправленными итераторами или итераторы с произвольным доступом (все контейнеры последовательностей, кроме forward_list и все ассоциативные контейнеры) могут создавать обратные итераторы через их функции-члены rbegin() и rend(). Поскольку С++ 11, соответствующие функции-члены возвращают итераторы только для чтения, crbegin() и crend ​​().

Для forward_lists и неупорядоченных контейнеров не требуется обратная итерация интерфейс (rbegin(), rend() и т.д.). Причина в том, что для реализации требуется, чтобы элементы.

Ответ 2

Он неупорядочен, поэтому порядок, в котором происходит итерация, является (или должен быть) несущественным.