Глава 18. Классы-контейнеры_________________________________463
int operator==(const STUDENT &rhs) const
( return (id == rhs.id); } int operator<(const STUDENT &rhs) const // Sort students by ID.
( return (id < rhs.id); } int CompareGrade(const STUDENT &rhs) const
{ return (grade < rhs.grade); }
// Определим простой вывод.
friend ostream& operator«(ostream &os, const STUDENT &s) {
os « setiosflags(ios::fixed I ios::left) « setprecision(l) « " " « setw(17) •« s.GetIdO « " " « s.GetGrade() « endl;
return os;
>
>;
#endif
«
Теперь на основе нового класса STUDENT продемонстрируем использование объектов множество и мультимножество.
#define RWSTD_NO_NAMESPACE ttinclude <iostream.h>
#include <set.h> ^include "student3.h"
// Это множество упорядочено посредством применения операции < //к идентификатору студента, то есть в лексикографическом // порядке имен студентов typedef set<STUDENT, less<STUDENT> > STUDENT_SET;
// Определим класс, который строится на основе функции // сравнения рейтингов студентов struct GRADE_COMPARE (
bool operator()(const STUDENT &sl, const STUDENT &s2) const f
return sl.GetGrade() < s2.GetGrade();
) );
// Здесь определяется тип множества так, чтобы использовать
// рейтинги для упорядочивания.
// Студенты могут иметь одинаковые рейтинги, поэтому используется
// мультимножество — оно допускает одинаковые ключи.
typedef multiset<STUDENT, GRADE_COMPARE> STUDENT_SET2;