Для list, vector, set и unordered_set назовите сложность поиска элемента по значению и удаления найденного элемента, а также правила инвалидирования итераторов.

Для std::set (основан на сбалансированном двоичном дереве поиска):

Короткий ответ

Что ответить на собеседовании

Для std::set (основан на сбалансированном двоичном дереве поиска):

Подробный разбор

Ответ с пояснениями

Для std::set (основан на сбалансированном двоичном дереве поиска):

  • Вставка (insert одного элемента): O(log N)
  • Удаление (erase одного элемента): O(log N)
  • Поиск (find): O(log N)

Для std::unordered_set (основан на хеш-таблице):

  • В среднем:

    • Вставка (insert одного элемента): O(1)
    • Удаление (erase одного элемента): O(1)
    • Поиск (find): O(1)
  • В худшем случае (при сильных коллизиях в хеш-таблице):

    • Вставка (insert одного элемента): O(N)
    • Удаление (erase одного элемента): O(N)
    • Поиск (find): O(N)

Таблица сравнения:

Операция std::set std::unordered_set (в среднем) std::unordered_set (в худшем случае)
Вставка единичного элемента O(log N) O(1) O(N)
Удаление единичного элемента O(log N) O(1) O(N)
Поиск единичного элемента O(log N) O(1) O(N)

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку