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

    На этом шаге мы рассмотрим особенности вставки элементов в отображения и мультиотображения.

    В таблице 1 перечислены операции встапки и удаления элементов в отображениях и мультиотображениях.

Таблица 1. Операции вставки и удаления для отображений и мультиотображений
Операция Описание
c.insert(elem) Вставляет копию elem и возвращает позицию нового элемента; для отображений также возвращается признак успешного выполнения операции
c.insert(pos,elem) Вставляет копию elem и возвращает позицию нового элемента (pos определяет рекомендуемую позицию, с которой следует начинать поиск позиции вставляемого элемента)
c.insert(beg,end) Вставляет копию всех элементов интервала [beg,end) (и не возвращает значения)
c.erase(elem) Удаляет все элементы со значением elem и возвращает количество удаленных элементов
c.erase(pos) Удаляет элемент в позиции итератора pos (не возвращает значения)
c.erase(beg,end) Удаляет все элементы из интервала [beg,end) (не возвращает значения)
c.clear() Удаляет все элементы (контейнер остается пустым)

    Замечания на 164 шаге относительно операций вставки и удаления для множеств и мультимножеств справедливы и для отображений с мультиотображениями. В частности, тип возвращаемого значения этих функций тоже зависит от типа контейнера. Но использование функций несколько усложняется тем, что элемент представляет собой пару "ключ/значение".

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

    В следующем простом примере вставки элемента в отображение мы также проверяем, успешно ли завершилась операция:

  std::map<std::string,float> coll;
  .   .   .   .   
  if (coll.insert(std::make_pair("otto",22.3)),second) {
    std::cout << "Вставили otto/22.3" << std::endl;
  } else  {
    std::cout << "Не удалось вставить otto/22.3 "
      << "(ключ otto уже есть)" << std::endl; 
  }

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

    На следующем шаге мы закончим изучение этого вопроса.




Предыдущий шаг Содержание Следующий шаг