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

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

    По аналогии с множествами и мультимножествами в отображениях и мультиотображениях определены специальные функции поиска, оптимизированные с учетом внутренней древовидной структуры контейнера (таблица 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 шаг), за исключением того, что позиция определяется по ключу.

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




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