Глава 18. Классы-контейнеры_________________________________451
Для нахождения элементов-ассоциаций в словаре используется функция-член Find. Тип параметра, передаваемого в Find, зависит от того, является ли контейнер прямым или косвенным.
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) ;
}