Если вы хотите отсортировать по отношению определенно вашего LessA
компаратора, просто передать экземпляр LessA
в качестве третьего аргумента (и, так как вы используете C++ 11, предпочитают глобальную std::begin()
и std::end()
функции):
std::sort(std::begin(a), std::end(a), LessA());
// ^^^^^^^
Теперь, если ваш LessA()
выражает <
отношение и вы хотите отсортировать по противоположному критерию, вы могли бы сделать:
std::sort(std::begin(a), std::end(a),
[] (A const& a1, A const& a2))
{
return LessA()(a2, a1);
}
Другая вещь, которую вы могли бы сделать, чтобы ваш заказ компаратор принимает аргумент, который определяет, как он должен выполнить сравнение:
class CompA {
bool lessThan;
public:
CompA(bool lessThan) : _lessThan(lessThan) { }
bool operator()(const A& a1, const A& a2) const {
if (_lessThan)
{
// return true iff a1 < a2;
}
else
{
// return true iff a1 > a2;
}
}
};
Вы могли бы использовать его таким образом, чтобы отсортировать в порядке возрастания:
std::sort(std::begin(a), std::end(a), CompA(true));
И этот способ сортировки в порядке убывания:
std::sort(std::begin(a), std::end(a), CompA(false));
другой возможности, учитывая исходный LessA
компаратор, является использование std::bind
поменять порядок аргументов пользовательского компаратора:
LessA comp;
using namespace std::placeholders;
std::sort(std::begin(v), std::end(v),
std::bind(&LessA::operator(), comp, _2, _1));
http://www.cplusplus.com/reference/algorithm/sort/ –
Лямбда, вероятно, лучше всего здесь. – Joel