Ordenar lista usando a function de ordenação STL

Estou tentando classificar uma lista (parte de uma class) em ordem decrescente contendo itens de uma struct , mas ela não compila:

erro: nenhuma correspondência para ‘operator-‘ em ‘__last – __first’

 sort(Result.poly.begin(), Result.poly.end(), SortDescending()); 

E aqui está SortDescending :

 struct SortDescending { bool operator()(const term& t1, const term& t2) { return t2.pow < t1.pow; } }; 

Alguém pode me dizer o que está errado?

O algoritmo padrão std::sort requer iteradores de access random, que std::list<>::iterator não são (iteradores de lista são iteradores bidirecionais).

Você deve usar a function de membro std::list<>::sort .

std::list tem um método de sort embutido que você precisa usar, já que std::sort só funciona com iteradores de access random, enquanto std::list::iterator simplesmente pertence à class de iteradores bidirecionais.

 Result.poly.sort(SortDescending()); 

Além disso, seu operator () deve ser marcado como const .

 struct SortDescending { bool operator()(const term& t1, const term& t2) const { return t2.pow < t1.pow; } }; 

Finalmente, você não precisa escrever seu próprio comparador para isso, simplesmente use std::greater (localizado no header padrão ):

 Result.poly.sort(std::greater()); 

Parece que os tipos de iterador para Result.poly está faltando operator - . std::sort não funciona com a mudança std::list para Result.poly.sort