Шаг 165.
Библиотека STL. Контейнеры STL. Операции над множествами и мультимножествами. Вставка и удаление элементов (окончание)

    На этом шаге мы рассмотрим удаление элементов.

    Чтобы удалить элемент с некоторым значением, достаточно вызвать функцию erase():

  std::set<Elem> coll;
  .    .    .    .
  // Удаление всех элементов с переданным значением 
  coll.erase(value);

    В отличие от списков функция удаления для множеств и мультимножеств называется erase(), а не remove() (см. описание функции remove() на 153 шаге). Она ведет себя иначе и возвращает количество удаленных элементов. Для множеств возвращаются только значения 0 и 1.

    Если мультимножество содержит дубликаты, вам не удастся использовать функцию erase() для удаления только первого дубликата. Вместо этого можно воспользоваться следующим фрагментом:

  std::multiset<Elem> coll;
  .    .    .    .    .
  // Удаление первого элемента с переданным значением 
  std::multiset<Elem>::iterator pos; 
  pos = coll.find (elem); 
  if (pos != coll.end()) {
    coll.erase(pos); 
  }

    Вместо алгоритма find() следует использовать функцию класса find(), потому что она работает быстрее.

    Обратите внимание: в данном случае также существуют различия в типе возвращаемого значения, а именно: для последовательных и ассоциативных контейнеров функция erase() возвращает разные типы.