Операции над отображениями и мультиотображениями. Специальные операции поиска

   
На этом шаге мы рассмотрим некоторые операции поиска.

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

Таблица 1. Специальные операции поиска в отображениях и мультиотображениях

Операция Описание
count(key) Возвращает количество элементов с ключом key
find(key) Возвращает позицию первого элемента с ключом key (или end())
lower_bound(key) Возвращает первую позицию, в которой может быть вставлен элемент с ключом key (первый элемент >= key)
upper_bound(key) Возвращает последнюю позицию, в которой может быть вставлен элемент с ключом key (первый элемент > key)
equal_range(key) Возвращает первую и последнюю позиции, в которых может быть вставлен элемент с ключом key (интервал, в котором элементы равны key)

   
Функция find() ищет первый элемент с заданным ключом и возвращает его позицию в виде итератора. Если поиск оказывается
безуспешным, функция find() возвращает end(). Функция find() не может использоваться для поиска элемента
с заданным значением. Вместо этого приходится задействовать универсальный алгоритм типа find_if() или программировать цикл.
Ниже приведен пример простого цикла, выполняющего некоторую операцию для каждого элемента с заданным значением:

  std::multimap<std::string,float> coll;
  // Выполнение операции над всеми элементами с заданным значением 
  std::multimap<std::string,float>::iterator pos; 
  for (pos = coll.begin(); pos != coll.end(); ++pos) { 
    if (pos->second == value) { 
      do_something();
    }
  }

   
Если цикл используется для удаления элементов, будьте осторожны - по ошибке можно "отпилить ветку, на которой сидишь".

   
Искать элемент с заданным значением при помощи алгоритма find_if() еще сложнее, чем запрограммировать цикл, поскольку
для этого придется создать объект функции, сравнивающий значение элемента с заданным значением. Пример мы рассмотрим позже.

   
Функции lower_bound(), upper_bound() и equal_range() работают так же, как во множествах (смотри 161 шаг),
за исключением того, что позиция определяется по ключу.

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



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

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