Глава 18. Классы-контейнеры_________________________________509
такой найден, или на конец контейнера, если он не найден. iower_bound () возвращает итератор, указывающий на первый элемент, совпадающий с объектом. upper_ bound () возвращает итератор, указывающий на следующий элемент после последнего из совпадающих с заданным объектом. Обе функции возвращают итератор, указывающий на конец множества, если ни один совпадающий элемент не найден. equal_range () возвращает пару объектов, содержащую результат выполнения функции iower_bound() как первый элемент пары и результат выполнения функции upper bound о в качестве второго элемента.
Примеры использования множеств и мультимножеств приведены в листинге 18.17.
Отображение и мультиотображение
Отображения и мультиотображения (map и multimap) очень похожи на множества и мультимножества. Все они относятся к категории ассоциативных контейнеров. Ассоциативные контейнеры поддерживают упорядочивание элементов на основе ключа. Для множеств и мультимножеств такими ключами являются сами хранимые объекты. Отображения и мультиотображения разделяют хранимые объекты и ключи. Отображения не допускают повторения ключей, мультиотображения — допускают. Общая идея отображения аналогична контейнеру-словарю из библиотеки BIDS.
Как множества и мультимножества, отображения и мультиотображения служат для быстрого удаления, вставки и поиска элементов.
У объектов, используемых в качестве ключей, должна быть определена операция сравнения. Для определения эквивалентности объектов а и b с ключами акеу и ькеу ключи сравниваются в двух направлениях: compare (акуе,
ЬКеу) && Compare(ЬКеу, аКеу).
Для использования отображения и мультиотображения необходимо подключить заголовок map.h.
Общеупотребительные функции-члены и операции для отображений и мультиотображений идентичны. Они также очень близки тем, что используются для множества и мультимножества. Здесь мы рассмотрим только отличия.
Для определения отображения или мультиотображения типы ключей хранимых объектов должны быть параметрами шаблонов. В дополнение к ним есть необязательный параметр — объект-функция для сравнения ключей.
// Отображение для хранения строк с целыми ключами ' map-tint, string> strMap;
// Мультиотображение для хранения строк с целыми ключами multimap<int, string, greater<int» strMMap'l;
// Мультиотображение для хранения строк, содержащих элементы вектора multimap<float, string> strMMap2 (strVector,begin()), strVector.endf) ) ;