510 __ ___ Часть III. Современное программирование на C++

Множества и мультимножества определяют так называемый valueJype — тип хранимых значений. Отображения и мультиотображения также определяют value_type, но в данном случае value_type — это пара значений. Первая часть — ключ, вторая — хранимый объект. Отображения и мультиотображения определяют дополнительный тип key_type. Функции вроде find() используют key_type для поиска в отображениях и мультиотображениях.

strMap.insert(map<int, string>::value type(3, "three"));

strMap.find(3) ;

Разыменование итератора возвращает пару объектов.

typedef map<int, string, less<int» STR_MAP;

STR_MAP::iterator ii=strMap.find(3);

if (ii != strMap.end()) // end возвращает-итератор, а значит,

//и парный объект . cout « "Ключ: " « ii.first « "Значение: " « ii.second « endl;

Отображение имеет индексную операцию []. Ключ используется как индекс, а возвращаемое значение является ссылкой на хранимый объект.

cout « "По индексу 3 лежит: " « strMap[3];

strMap[3]=string("THREE") ;

cout « "А теперь там: " « strMap[3];

Листинг 18.26 дает пример использования отображения и мультиотображения.

ftdefine RWSTD_NO_NAMESPACE ftinclude <iostream.h>

#include <map.h>

#include "student3.h"

// Это мультиотображение использует ключ с операцией < //и содержит строки с курсами колледжа. Контейнер содержит // объекты типа STUDENT. typedef multimap<string, STUDENT, less<string» ENROLLMENT;

typedef ENROLLMENT::value_type ENROLL_TYPE;

void PrintStudent(const ENROLL_TYPE &s, bool printCourse = true) {

if (printCourse) cout « s.first;

cout « s.second « endl; ' }

int main() (

ENROLLMENT msu;

msu.insert(ENROLLMENT::value_type("CS101", STUDENT("John Newton", 1.0)))