Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- #ifndef HEAPTEMPLATE_H
- #define HEAPTEMPLATE_H
- #include <queue>
- template <class T>
- class Heap {
- public:
- Heap() {};
- virtual ~Heap() {};
- void agregar(T dato, int prioridad) {
- ParPrioridadDato par;
- par.first = prioridad;
- par.second= dato;
- h2.push(par);
- };
- T extraer(){
- ParPrioridadDato par = h2.top();
- h2.pop();
- return par.second;
- }
- bool vacia() {
- return h2.empty();
- }
- private:
- typedef std::pair<int, T> ParPrioridadDato; // Prioridad, orden
- class ComparePrioridad {
- public:
- bool operator() (ParPrioridadDato a, ParPrioridadDato b) {
- return a.first > b.first;
- }
- };
- std::priority_queue<ParPrioridadDato, std::vector<ParPrioridadDato>, ComparePrioridad> h2;
- };
- #endif // HEAPTEMPLATE_H
- /*******************************CLASE STACK***********************************/
- #include <stack>
- template <class Tipo>
- class Stack : private stack<Tipo> {
- public:
- void push(Tipo t){
- stack<Tipo>::push(t);
- }
- Tipo pop(){
- Tipo temp = stack<Tipo>::top();
- stack<Tipo>::pop();
- return temp;
- }
- bool empty(){
- return stack<Tipo>::empty();
- }
- };
- /*******************************CLASE Paciente***********************************/
- class Paciente{
- public:
- Paciente(){}
- Paciente(string n, int e): nombre(n), edad(e){
- }
- int getEdad(){
- return edad;
- }
- void ver(){
- cout <<"nombre:"<<nombre<<" ("<<edad<<")"<<endl;
- }
- private:
- string nombre;
- int edad;
- };
- /*******************************PROGRAMA PRINCIPAL***********************************/
- int main()
- {
- //Parte 1: Utilizando heap de forma simple
- Heap<string> h;
- h.agregar("uno", 220);
- h.agregar("dos", 6);
- h.agregar("tres", 2);
- h.agregar("cuatro", 1);
- while(!h.vacia())
- cout << h.extraer()<<endl;
- //Parte 2 utilizando Un Heap para ordenar un Stack
- //creamos objetos de tipo paciente
- Paciente juanito("juanito", 65);
- Paciente maria("maria", 36);
- Paciente pedro("pedro", 5);
- //creamos un stack de pacientes
- Stack<Paciente> stackPacientes;
- stackPacientes.push(juanito);
- stackPacientes.push(maria);
- stackPacientes.push(pedro);
- stackPacientes.push(Paciente("Daniela", 34));
- stackPacientes.push(Paciente("Marco", 28));
- //utilizamos un heap para ordenar por edad
- Heap<Paciente> pacientes;
- while(!stackPacientes.empty()){
- Paciente aux = stackPacientes.pop();
- pacientes.agregar(aux, aux.getEdad());
- }
- //traspamos la información ordenada del Heap al stack de datos
- while(!pacientes.vacia()){
- stackPacientes.push(pacientes.extraer());
- }
- //mostramos la información en el stack, pero esta vez de forma ordenada
- while(!stackPacientes.empty()){
- stackPacientes.pop().ver();
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement