Re[5]: Moya sortirovka dlya std::list
От: Кодт Россия  
Дата: 18.04.02 16:01
Оценка:
Здравствуйте 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 оператор-то не виртуальный!

Опаньки.

Если не верите — напишите и расставьте брекпоинты.
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.