448_____________________Часть III. Современное программирование на C++
. cout « setiosflags(ios::fixed I ios::left) « setprecision(l);
while (s = iterator++)
cout « " " « setw(20) « s->Get!d() « " " « s->GetGrade() « endl;
>
Словарь
Словарь (dictionary) содержит каждый объект вместе со связанным (ассоциированным) с ним ключом для поиска в хэш-таблице. Преимущество такого контейнера состоит в возможности быстрого извлечения элементов. Элементы, входящие в словарь, должны быть специальными контейнерами BIDS, которые называются ассоциациями (association). Ассоциации связывают хранимые в словаре объекты с ключами поиска. Объект-ключ должен быть доступен либо функции-члену вида:
unsigned HashValueO *
либо глобальной функции
unsigned HashValue(KEYS)
где KEY— ключ поиска. Для класса STUDENT из листинга 18.1, studentl.h, ключ поиска может быть получен из STUDENT :: id с помощью строковой функции-члена C++ hash(). Класс можно определить так, что он будет выводиться из строкового класса C++ в класс нового типа, который поддерживает функцию-член HashValue. Листинг 18.9 демонстрирует использование такого класса.
// Для краткости все функции-члены являются встраиваемыми.
#include <iostream.h> ftinclude <iomanip.h>
#include <cstring.h> ftinclude <classlib\assoc.h>
#include "studentl.h"
// Необходим ключ поиска для класса STUDENT,
// который имеет функцию-член
// unsigned HashValueO
// или глобальную функцию
// unsigned HashValue(KEYS)
// где KEY — тип, используемый для поиска по ключу в словаре.
// Ключ поиска получаем из идентификатора строкового типа
// STUDENT::id. Чтобы обеспечить функцию-член HashValue,
// из строкового класса создаем новый класс