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)))