I want to insert and order 3 objects (from different classes) in a priority queue.
I create an array to access to the element inside the priority and then I push in the priority queue.
The code:
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
class Alumnos{
public:
string nombre;
int edad;
string operativo;
Alumnos( string nombre, int edad, string oper ){
this -> nombre = nombre;
this -> edad = edad;
this -> operativo = oper;
};
virtual void verificarEdad(){};
};
class Nuevo : public Alumnos{
public:
Nuevo( string nombre, int edad, string oper) : Alumnos( nombre,edad, oper ){};
void verificarEdad(){
cout << "Nuevo" << endl;
};
};
class Medio : public Alumnos{
public:
Medio( string nombre, int edad, string oper ) : Alumnos ( nombre, edad, oper ){};
void verificarEdad(){
cout << "Medio" << endl;
};
};
class Viejo : public Alumnos{
public:
Viejo( string nombre, int edad, string oper ) : Alumnos ( nombre, edad, oper ){};
void verificarEdad(){
cout << "Viejo" << endl;
};
};
bool operator > (Alumnos alumno1, Alumnos alumno2)
{
return alumno1.edad > alumno2.edad;
}
int main ()
{
Nuevo *alumnoNuevo[4];
Medio *alumnoMedio[4];
Viejo *alumnoViejo[4];
priority_queue<Alumnos*, vector<Alumnos*>, greater<vector<Alumnos*>::value_type> > mypq;
alumnoMedio[0] = new Medio("Helder", 25, "activo");
alumnoNuevo[0] = new Nuevo("Pepe", 18, "activo");
alumnoViejo[0] = new Viejo("Pepito", 31, "activo");
alumnoMedio[1] = new Medio("Juan", 21, "activo");
// nuevo n1("Helder", 18);
// alumnos &al = n1;
// al.verificarEdad();
//
// medio m1("Pepe", 25);
// alumnos &al1 = m1;
// al1.verificarEdad();
mypq.push(alumnoMedio[0]);
mypq.push(alumnoNuevo[0]);
mypq.push(alumnoViejo[0]);
mypq.push(alumnoMedio[1]);
alumnoMedio[1] -> operativo = "no Activo";
Alumnos *al = mypq.top();
for( int i = 0; i < 4; i++ ){
al -> verificarEdad();
cout << "mypq.top() is now " << al -> edad << endl;
mypq.pop();
// mypq.push(al);
al = mypq.top();
}
/*
* C A M B I A R E L E S T A D O
*/
// alumnoMedio[0] -> operativo = "no Activo";
// cout << endl << alumnoMedio[0] -> operativo << endl << endl;
return 0;
}
The exit is:
Medio
mypq.top() is now 25
Nuevo
mypq.top() is now 18
Viejo
mypq.top() is now 31
Medio
mypq.top() is now 21
This is the order I inserted in the queue.
The class operator > is correctly called and the code is correct?
What should I do to insert objects and ordered them with my code?