Глава 18. Классы-контейнеры_________________________________451

Для нахождения элементов-ассоциаций в словаре используется функция-член Find. Тип параметра, передаваемого в Find, зависит от того, является ли контейнер прямым или косвенным.

h04511.jpg

ttinclude <iostream.h> #include <iomanip.h> ^include <classlib\dict.h> ftinclude "stu_key.h"

// STUDENT_KEY хранится прямо, a STUDENT косвенно в ассоциации typedef TDIAssociation<STUDENT_KEY, STUDENT> STUDENT_ASSOC;

// Словарь содержит указатели на объекты STUDENT_ASSOC typedef TIDictionaryAsHashTable<STUDENT_ASSOC> STUDENT_DICT;

// Итератор, поддерживаемый BIDS

typedef TIDictionaryAsHashTableIterator<STUDENT_ASSOC>STUDENT_DICT_ITERATOR;

// Размещение элементов в контейнере. void WriteStudents(STUDENTJ3ICT&);

int main() {

// Создание данных типа STUDENT

STUDENT *s[4] ;

s[0] = new STUDENT("JohnNewton", 1.0);

s[l] = new STUDENT("DeanBrown", 2.0);

s[2] =-new STUDENT("CarolBishop", 3.0);

s[3] = new STUDENT("GaryCook", 4.0);

// Помещение объектов STUDENT в словарь STUDENT_DICT students(10) ;

for (int i = 0; i < 4; i++)

students.Add(new STUDENT_ASSOC(STUDENT_KEY(s[i]->GetId()), s[i]));

cout « "Initial dictionary of " i3>« students. Get Items InContainer () « " students:" « endl;

WriteStudents(students);

// Создание объекта поиска. Значение из ассоциации здесь не нужно STUDENT_ASSOC *foundSAP;

STUDENT_ASSOC searchSA("CarolBishop", 0) ;

foundSAP = students.Find(SsearchSA) ;

if (foundSAP) (

const STUDENT *sp = foundSAP->Value() ;

//Значение ассоциации — указатель на элемент cout « "Student " « sp->Get!d() « " was found." « endl;

students.Detach(foundSAP); // Удаление и уничтожение

// (владельцем объекта).

cout « "After deletion " « students.GetItemsInContainer() 'Ъ« " students:" « endl;

WriteStudents(students) ;

}