Resulta que yo tengo el siguiente código:
Código C++:
Ver original
#include <iostream> #include <vector> #include <algorithm> using namespace std; class Nodo{ public: int dato; bool marca; bool operator < (const Nodo*& other) const { return (dato < other->dato); } }; int main(void){ Nodo** array = new Nodo* [10]; for (int i=0; i<10; i++){ array[i] = new Nodo(); array[i]->dato = i; array[i]->marca = false; } //INTRODUCIR DATOS EN VECTOR vector<Nodo*> lista; lista.push_back(array[8]); lista.push_back(array[5]); lista.push_back(array[2]); lista.push_back(array[9]); lista.push_back(array[6]); lista.push_back(array[2]); lista.push_back(array[1]); lista.push_back(array[2]); lista.push_back(array[2]); //MOSTRAR POR PANTALLA for (int i=0; i<lista.size(); i++) cout << lista[i]->dato << ","; cout << endl; sort(lista.begin(), lista.end()); for (int i=0; i<lista.size(); i++) cout << lista[i]->dato << ","; cout << endl; return 0; }
Este código funciona. Funciona perfectamente, lo podéis comprobar que la salida por pantalla será tal que así:
Código C++:
Ver original
8,5,2,9,6,2,1,2,2, 1,2,2,2,2,5,6,8,9,
Ahora bien, yo estoy trabajando con Qt ya que estoy realizando una aplicación gráfica, y este código no me funciona. Compilar, compila perfectamente, pero a la hora de ejecutar me doy cuenta de que no ordena correctamente, intercambia algunos valores por otros y ya.
He probado a declarar un QVector en vez de un std::vector, y ha utilizar la llamada qSort() en vez de sort(), los cuales creo que son equivalentes, y sigo teniendo el mismo problema.
Solo he conseguido que funcione correctamente si no llamo al operador sobrecargado y hago algo tal que así:
Código C++:
Ver original
QVector<Nodo*> lista; ... ... bool lessThan( Nodo* & e1, Nodo* & e2 ){ return e1->dato < e2->dato; } void Robot::ordenar(){ for (int i=0; i<lista.size(); i++) cout << lista[i]->dato << ","; cout << endl; qSort(lista.begin(),lista.end(),lessThan); for (int i=0; i<lista.size(); i++) cout << lista[i]->dato << ","; cout << endl; }
De esta forma funciona correctamente con Qt, pero no me gusta. Si tengo la clase sobrecargada con el operador < me gustaría poder utilizarlo, para no tener que crear otra función como lessThan().
¿Alguna idea?