Здравствуйте peter@work, Вы писали:
>у меня есть list из своих class'ов и я хочу их отсортировать по определенному полю. Или для этого все-таки свою ф-цию писать?
Функцию сортировки? Ни в коем разе. Тем более, что для списка сделать эффективную сортировку "снаружи" невозможно. Достаточно написать свою функцию сравнения.
>>class CStudent
>{
>public:
>[skip]
>private:
> std::string FName; // Имя
> std::string MName; // Отчество
> std::string LName; // Фамилия
> <...>
Т.к. все данные-члены класса CStudent private, предполагаем, что существуют соответствующие const public функции доступа с именами fname, mname, lname.
>И вот я хочу отсортировать по ФИО.
Допустим, что имеется в виду сортировка по фамилиям, при одинаковых фамилиях — по именам, при одинаковых фамилиях и именах — по отчествам.
struct CStudentNameIsLess
{
// true, если l "меньше" r по выбранному критерию
bool operator()(const CStudent& l, const CStudent& r) const
{
int lname_cmp = l.lname().compare(r.lname()); // сравнить фамилии
if (lname_cmp < 0)
{
return true; // фамилия "меньше"
}
else if (lname_cmp == 0)
{
int fname_cmp = l.fname().compare(r.fname()); // фамилии одинаковые, сравнить имена
if (fname_cmp < 0)
return true; // имя "меньше"
else if (fname_cmp == 0)
return l.mname() < r.mname(); // имена одинаковые, сравнить отчества
}
return false;
}
};
slist.sort(CStudentNameIsLess());
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен