Ver Mensaje Individual
  #2 (permalink)  
Antiguo 03/12/2014, 05:50
eferion
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 10 años, 1 mes
Puntos: 204
Respuesta: Sort y sobrecarga del operador <

Código C++:
Ver original
  1. Nodo*&

¿Por qué tanto odio? Qué sentido tiene pasar la referencia de un puntero?

Cuando tu declaras una referencia, el compilador trata esa variable como si se tratase de un puntero. El programador no se entera porque es un proceso transparente para el, pero eso no quiere decir que sea inocuo. Acceder a una referencia es tan costoso como acceder a un puntero, luego acceder a un puntero a través de una referencia cuesta el doble que acceder directamente al puntero.

Si lo has hecho para evitar la "copia" del objeto, no has conseguido evitar tal cosa, ya que cuando un puntero se pasa por valor, lo único que se copia es la dirección de memoria apuntada, es decir, el valor del puntero.

Código C++:
Ver original
  1. bool operator < (const Nodo* other) const
  2. {
  3.   return (dato < other->dato);
  4. }

Esta nueva versión funciona igual de bien que la anterior, bueno, miento, funciona mejor ya que, has eliminado algo de overhead.

Hablando de tu problema, el origen se encuentra en que el primer miembro de la comparación, tal y como está implementada, deber ser un objeto pasado por valor (o referencia)... y tu le intentas pasar a través de "sort" o "qsort" un puntero.

Prueba con esto:

Código C++:
Ver original
  1. class Nodo{
  2. public:
  3.     int dato;
  4.     bool marca;
  5.  
  6.     friend bool operator < (const Nodo* nodo1, const Nodo* nodo2);
  7. };
  8.  
  9. bool operator < (const Nodo* nodo1, const Nodo* nodo2)
  10. {
  11.     return (nodo1->dato < nodo2->dato);
  12. }

Con esto ya tienes un operador capaz de trabajar con punteros de tipo "Nodo"