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,

// из строкового класса создаем новый класс