Ordenar la lista usando la función de clasificación STL

Estoy tratando de ordenar una lista (parte de una clase) en orden descendente que contiene elementos de una struct , pero no comstack:

error: no hay coincidencia para ‘operator-‘ en ‘__last – __first’

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

Y aquí está SortDescending :

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

¿Alguien puede decirme qué pasa?

El algoritmo estándar std::sort requiere iteradores de acceso aleatorio, que std::list<>::iterator s no lo son (los iteradores de lista son iteradores bidireccionales).

Debería usar la función de miembro std::list<>::sort .

std::list tiene un método de sort integrado que debe usar, ya que std::sort solo funciona con iteradores de acceso aleatorio, mientras que std::list::iterator simplemente pertenece a la clase de iteradores bidireccionales de iteradores.

 Result.poly.sort(SortDescending()); 

Además, su operator () debe estar marcado const .

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

Finalmente, no necesita escribir su propio comparador para eso, simplemente use std::greater (ubicado en el encabezado estándar ):

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

Parece que a los tipos de iterador de Result.poly le falta el operator - . std::sort no funciona con std::list change to Result.poly.sort