2
max(Im)Цитата:
Как объявить эту функцию, как показать, что она принимает компаратор
Можно в стиле C использовать указатель на функцию. А можно использовать C++ шаблоны. Самый примитивный вариант:
template <typename Cmp>
void MySort(int Arg, Cmp cmp)
{
...
if(cmp(..., ...))
...
}
Теперь можете написать или функцию-"компаратор":
bool MyCmpFunc(int a, int b)
{
...
}
или класс-функтор с перегруженным оператором вызова функции:
struct MyCmpClass
{
bool operator () (int a, int b)
{
...
}
} MyCmpObject; // Optional.
Теперь можно делать что-то такое:
MySort(1, MyCmpFunc);
MySort(1, MyCmpClass());
MySort(1, MyCmpObject);
Цитата:
что это будет значить?
Это означает, что сортировка будет происходить с использованием указанной вами функции сравнения, возвращающей логический результат сравнения объектов типа
my_struct. А что вы ожидали? :)
Цитата:
Как мне этот less переопределить?
Создайте свой компаратор. Он может быть простой функцией вроде показанной выше
MyCmpFunc или функтором. Есть ещё прием с переопределением, точнее говоря со специализацией самого
std::less путем описания этой специализации в пространстве имен
std, т.е. пишите что-то вроде
namespace std {template ... struct less <...>: binary_function ... {...};}. Думаю, вам пока это не нужно...
Upd: Ещё можно определить/перегрузить оператор сравнения для вашего типа данных.