#include using namespace std; #include class Personaje { int edad; string nombre; public: Personaje(int e, const string & n) : edad(e), nombre(n) {} int getEdad() const {return edad; } const string & getNombre() const {return nombre; } }; class ComparadorPersonajes { public: bool operator() (Personaje * personaje1, Personaje * personaje2) const { // Descomenta esto y pruebalo: // return personaje1->getNombre() < personaje2->getNombre(); // Sustituye getNombre() por nombre y entiende lo que sucede // Prueba tambien a cambiar < por > en la siguiente instruccion // y entiende lo que sucede return personaje1->getEdad() < personaje2->getEdad(); } }; int main() { // No sirve priority_queue porque internamente el operador < no // compararia personajes sino punteros (direcciones de memoria), y no podemos // sobrecargar operator<(Personaje*, Personaje*) priority_queue, ComparadorPersonajes> pq; Personaje * p1 = new Personaje(15, "Vicente"); Personaje * p2 = new Personaje(10, "Ana"); Personaje * p3 = new Personaje(20, "Rodrigo"); pq.push(p1); pq.push(p2); pq.push(p3); cout << "Talla: " << pq.size() << endl; while (! pq.empty() ) { cout << "[" << pq.top()->getEdad() // Observa cuando se usa -> << " - " << pq.top()->getNombre() << "]" << endl; pq.pop(); } }