Выбор ответа Middle Контейнеры STL изнутри обновлено

Перехеширование unordered_map

Вопрос

Что происходит с итераторами и ссылками на элементы std::unordered_map при перехешировании?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Итераторы инвалидируются, а ссылки на сами элементы остаются. Элементы живут в отдельных узлах, перехеширование лишь перераспределяет узлы по новому массиву корзин.

Варианты ответа

  1. Инвалидируется всё: узлы перевыделяются в новом массиве
  2. Ничего не инвалидируется: rehash меняет только число корзин
  3. Инвалидируются ссылки на элементы, а итераторы остаются
  4. Итераторы инвалидируются, а ссылки на сами элементы остаютсяправильный ответ

Разбор

Элементы живут в отдельных узлах, перехеширование лишь перераспределяет узлы по новому массиву корзин. Порядок обхода меняется, поэтому итераторы недействительны, но адреса самих элементов прежние.

  • Инвалидируется не всё: узлы не перевыделяются.
  • Итераторам нельзя доверять после rehash.
  • Последний вариант перевёрнут.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.