Hola a todos, estoy teniendo algunos problemas bastante raros con la sobrecarga del operador < de una clase para poder realizar un sort a un vector que tengo.
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 original8,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 originalQVector<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?