Операции над множествами и мультимножествами. Вставка и удаление элементов (окончание)

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

   
Чтобы удалить элемент с некоторым значением, достаточно вызвать функцию 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() возвращает разные типы.

  • Последовательные контейнеры поддерживают следующие функции erase():
      iterator erase(iterator pos);
      iterator erase(iterator beg, iterator end);
    
  • Ассоциативные контейнеры поддерживают следующие функции erase():
      void erase(iterator pos);
      void erase(iterator beg, iterator end);
    

       
    Такие различия были внесены по соображениям быстродействия. В ассоциативных контейнерах на поиск и возвращение следующего
    элемента потребовалось бы дополнительное время, поскольку контейнер реализован в виде бинарного дерева. С другой стороны,
    чтобы программный код работал с любым контейнером, возвращаемое значение приходится игнорировать.

       
    На следующем шаге мы рассмотрим обработку исключений.



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий