Подтвердить что ты не робот

Список сортировки с использованием функции сортировки 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; 
    }
};

Может ли кто-нибудь сказать мне, что случилось?

4b9b3361

Ответ 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