Список вида с помощью функции вида STL

Я пытаюсь отсортировать список (часть класса) в порядке убывания содержащий объекты 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; 
    }
};

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

22
задан Jamal 2 June 2014 в 04:36
поделиться

3 ответа

Стандартный алгоритм std :: sort требует итераторов с произвольным доступом, которые std :: list < > :: iterator не являются (итераторы списка являются двунаправленными итераторами).

Следует использовать функцию-член std :: list <> :: sort .

37
ответ дан 29 November 2019 в 04:08
поделиться

Похоже, что в типах итераторов для Result.poly отсутствует оператор - . std :: sort не работает при изменении std :: list на Result.poly.sort

4
ответ дан 29 November 2019 в 04:08
поделиться

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>());
11
ответ дан 29 November 2019 в 04:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: