А>>>>В MSVC 6.0, к сожалению, можно только специализировать std::greater для своего класса. Предикат передать не получится (если, конечно, не править хедер руками).

peter>Вот он меня нафиг и посылает :no:

peter>Где править header?

Заголовок <list> (измененные/добавленные строки выделены):
    //typedef greater<_Ty> _Pr3; // эту закомментировать
    template<class _Pr3>          // эту добавить
    void merge(_Myt& _X, _Pr3 _Pr)
        {. . .}
    . . .
    template<class _Pr3>          // эту добавить
    void sort(_Pr3 _Pr)
        {. . .}


ПК>>Кроме того, для избежания дальнейших сюрпризов при сопровождении кода, вместо специализации std::greater<> лучше определить соответствующую операцию `>' для объектов пользовательского класса.


peter>Как это делается?


Просто определяешь для своего класса операции `<', `>':

class CStudent
{
  . . .
};

bool operator <(const CStudent& l, const CStudent& r)
{
  . . .
}

bool operator >(const CStudent& l, const CStudent& r)
{
  . . .
}


Кстати, если уж определять эти, то стоит определить и остальные: ==, !=, >=, <=.
Автор: Павел Кузнецов    Оценить