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

multiset::erase(value)

Вопрос

В std::multiset<int> s{5, 5, 5, 7} нужно удалить одну пятёрку. Что сделает s.erase(5)?

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

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

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

Коротко

Правильный ответ: Удалит все три пятёрки; для одной нужен erase(find(5)). Перегрузка erase(const keytype&) удаляет все элементы с таким ключом и возвращает их число.

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

  1. Удалит одну пятёрку, первую по порядку обхода
  2. Удалит все три пятёрки; для одной нужен erase(find(5))правильный ответ
  3. Удалит элемент с индексом 5, которого нет, и ничего не сделает
  4. Не скомпилируется: у multiset нет erase по значению

Разбор

Перегрузка erase(const key_type&) удаляет все элементы с таким ключом и возвращает их число. Чтобы удалить одно вхождение, передают итератор (и сначала проверяют, что find не вернул end()).

  • Удаление одного элемента делает только перегрузка с итератором.
  • Индексов у multiset нет.
  • Код компилируется.

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

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