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: Ещё можно определить/перегрузить оператор сравнения для вашего типа данных.