Список сортировки с использованием функции сортировки STL
Я пытаюсь сортировать список (часть класса) в порядке убывания, содержащий элементы struct
, но он не компилируется:
ошибка: нет соответствия для 'operator-' в '__last - __first'
sort(Result.poly.begin(), Result.poly.end(), SortDescending());
И здесь SortDescending
:
struct SortDescending
{
bool operator()(const term& t1, const term& t2)
{
return t2.pow < t1.pow;
}
};
Может ли кто-нибудь сказать мне, что случилось?
Ответы
Ответ 1
Для стандартного алгоритма std::sort
требуются итераторы с произвольным доступом, которые std::list<>::iterator
не являются (итераторы списка представляют собой двунаправленные итераторы).
Вы должны использовать функцию члена std::list<>::sort
.
Ответ 2
std::list
имеет встроенный метод 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::greater<T>
(расположенный в стандартном заголовке <functional>
):
Result.poly.sort(std::greater<term>());
Ответ 3
Кажется, что типы итераторов для Result.poly
отсутствуют operator -
. std::sort
не работает с std::list
изменением на Result.poly.sort