Здравствуйте Burkutsky, Вы писали:
B>Здравствуйте Кодт, Вы писали:
К>>Здравствуйте DarkGray, Вы писали:
К>>Похоже, халявы нет, и придется юзать контейнеры с произвольным доступом...
B>Зачем с произвольным доступом
Затем, что для контейнеров с произвольным доступом существуют алгоритмы сортировки
по произвольному предикату сравнения. Тот же qsort.
B>смотрим определение
B>B>template<class _Ty>
B> struct greater : binary_function<_Ty, _Ty, bool> {
B> bool operator()(const _Ty& _X, const _Ty& _Y) const
B> {return (_X > _Y); }
B> };
B>
B>просто либо делаем производный класс от нашего с переопределённым опретором >, ( если не встроенный тип )
B>либо класс оболочку с нужным оператором.
Ля-ля-ля! Солнышко, птички...
Хорошо, если для сортируемого типа не был определен оператор >: определяем и получаем удовольствие.
Если же был — то
template<.....> struct greater :.....
{
bool operator()(.....) {......}
};
struct MySuperPuperClass : public greater<.....>
{
bool operator()(.....) {......}
};
// так объявлен метод списка
void std::list<T>::sort(greater<T>& pred);
// вызываем
MySuperPuperClass sorter;
mylist.sort(sorter);
// компилятор первым делом приводит (greater<T>)(sorter)
// а у greater оператор-то не виртуальный!
Опаньки.
Если не верите — напишите и расставьте брекпоинты.