Я пытаюсь отсортировать список (часть класса) в порядке убывания содержащий объекты a struct
, но это не компилирует:
ошибка: никакое соответствие для 'оператора -' в '__ в последний раз - __ сначала'
sort(Result.poly.begin(), Result.poly.end(), SortDescending());
И вот SortDescending
:
struct SortDescending
{
bool operator()(const term& t1, const term& t2)
{
return t2.pow < t1.pow;
}
};
Кто-либо может сказать мне что случилось?
Стандартный алгоритм std :: sort
требует итераторов с произвольным доступом, которые std :: list < > :: iterator
не являются (итераторы списка являются двунаправленными итераторами).
Следует использовать функцию-член std :: list <> :: sort
.
Похоже, что в типах итераторов для Result.poly
отсутствует оператор -
. std :: sort
не работает при изменении std :: list
на Result.poly.sort
std :: list
has встроенный метод sort
, который необходимо использовать, поскольку std :: sort
работает только с итераторами произвольного доступа, тогда как std :: list :: iterator
просто принадлежит к классу двунаправленных итераторов итераторов.
Result.poly.sort(SortDescending());
Кроме того, ваш оператор operator ()
должен иметь пометку const
.
struct SortDescending
{
bool operator()(const term& t1, const term& t2) const
{
return t2.pow < t1.pow;
}
};
Наконец, вам не нужно писать для этого собственный компаратор, просто используйте std :: better
(находится в стандартном заголовке
):
Result.poly.sort(std::greater<term>());