Отображение (мультиотображение).


Шаблоны map и multimap – это ассоциативные массивы, запоминающие ключи и ассоциированные с ними значения. Оба шаблона идентичны во всем, за исключением одного: ключи отображения (map) д.б. уникальными, а в мультиотображениях (multimap) они могут дублироваться.
С т. зр. использования отображения и мультиотображения подобны вектору, поддерживающему операцию индекси¬рования. Однако, в отличае от вектора, индексирование в отображениях и муль¬тиотображениях приводит к поиску ключевого значения. Кроме того, каче¬стве индексирования ключей, можно исп-ть любые объекты данных, включая строки, целые, числа с плавающей запя¬той и др.
Отображения и мультиотображения прекрасно подходят для приложений со словарями и др. небодьшими ассоциа¬тивными базами данных. Эти структуры автоматически упорядочивают свои элементы по ключам, что ускоряет по¬иск независимо от типа ключа. Для этого должна существовать возмож¬ность сравнения ключевых значений с помощью операций “меньше”.
Для объявления отображений map и multimap д.б. подготовлены 3 элемента: 1) тип ключа; 2) тип значения; 3) объект-функция сравнения.
Пусть нам необходимо создать ассо¬циативный массив строк и целых значе¬ний отобр. м.б. объявлены так:
map <string, int, less<string> >ralation;
Здесь ralation создается как структура данных map. Ключ является строкой, значения – целым числом, а объект – функция less используется для обеспечения порядка в стуктуре. Для вставки значений в контейнер необходимо создавать объекты вида строка – целое число.
Поскольку тип объекта обеспечивается шаблоном отображения, лучше всего использовать 2 определения типа, что значит упрощает синтаксис.
typedef map <string,int,less<string>>
typedef.Trelation::Value_type Tvalue;
Имея эти определения можно создать контейнер отображения типа Trelation и вставлять объекты Tvalue например так: Trelation relation;
relation.insert (Tvalue(string(“label1:”),relation.insert(Tvalue(string(“label2:”),2))));
Рассмотрим пример использования отображения для создания базы данных имен игроков и набранных ими очков.
В примере иллюстрируется один из способов вывода на экран объектов типа map. Функция << выводит на экран ключ и значение объекта Tvalue элементы доступны через итераторы first и second, порождаемые шаблоном map. Другой способ получения данных отображения состоит в использовании операций индексирования для ключевых индекса. Например для вывода на экран очков игрока Peter, можно применить следующий оператор:

В отличие от векторов отображения индекс ключевыми значениями в данном случае – строками. В результате происходящий поиск в контейнер объекта ассоциации (в данном случае числа с двойной точностью) и возвращает значение связанное с указанным ключом.
Функции для работы с контейнером:
find, erase, size, empty, count.

Загрузка...