Advertisement
davidcastrosalinas

20201106 Utilizando Heap para ordenar información de una clase Paciente

Nov 6th, 2020
160
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.06 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. #ifndef HEAPTEMPLATE_H
  5. #define HEAPTEMPLATE_H
  6.  
  7. #include <queue>
  8. template <class T>
  9. class Heap {
  10. public:
  11.     Heap() {};
  12.     virtual ~Heap() {};
  13.  
  14.     void agregar(T dato, int prioridad) {
  15.         ParPrioridadDato par;
  16.         par.first = prioridad;
  17.         par.second= dato;
  18.         h2.push(par);
  19.     };
  20.  
  21.     T extraer(){
  22.         ParPrioridadDato par = h2.top();
  23.         h2.pop();
  24.         return par.second;
  25.     }
  26.  
  27.     bool vacia() {
  28.         return h2.empty();
  29.     }
  30.  
  31. private:
  32.     typedef std::pair<int, T> ParPrioridadDato; // Prioridad, orden
  33.  
  34.     class ComparePrioridad {
  35.         public:
  36.             bool operator() (ParPrioridadDato a, ParPrioridadDato b) {
  37.                 return a.first > b.first;
  38.             }
  39.     };
  40.     std::priority_queue<ParPrioridadDato, std::vector<ParPrioridadDato>, ComparePrioridad> h2;
  41. };
  42.  
  43. #endif // HEAPTEMPLATE_H
  44.  
  45.  
  46. /*******************************CLASE STACK***********************************/
  47. #include <stack>
  48. template <class Tipo>
  49. class Stack : private stack<Tipo> {
  50. public:
  51.     void push(Tipo t){
  52.         stack<Tipo>::push(t);
  53.     }
  54.  
  55.     Tipo pop(){
  56.         Tipo temp = stack<Tipo>::top();
  57.         stack<Tipo>::pop();
  58.         return temp;
  59.     }
  60.  
  61.     bool empty(){
  62.         return stack<Tipo>::empty();
  63.     }
  64. };
  65.  
  66.  
  67. /*******************************CLASE Paciente***********************************/
  68. class Paciente{
  69. public:
  70.     Paciente(){}
  71.     Paciente(string n, int e): nombre(n), edad(e){
  72.     }
  73.     int getEdad(){
  74.         return edad;
  75.     }
  76.     void ver(){
  77.         cout <<"nombre:"<<nombre<<" ("<<edad<<")"<<endl;
  78.     }
  79.  
  80. private:
  81.     string nombre;
  82.     int edad;
  83. };
  84.  
  85.  
  86. /*******************************PROGRAMA PRINCIPAL***********************************/
  87. int main()
  88. {
  89.     //Parte 1: Utilizando heap de forma simple
  90.     Heap<string> h;
  91.     h.agregar("uno", 220);
  92.     h.agregar("dos", 6);
  93.     h.agregar("tres", 2);
  94.     h.agregar("cuatro", 1);
  95.  
  96.     while(!h.vacia())
  97.         cout << h.extraer()<<endl;
  98.  
  99.     //Parte 2 utilizando Un Heap para ordenar un Stack
  100.    
  101.     //creamos objetos de tipo paciente
  102.     Paciente juanito("juanito", 65);
  103.     Paciente maria("maria", 36);
  104.     Paciente pedro("pedro", 5);
  105.  
  106.     //creamos un stack de pacientes
  107.     Stack<Paciente> stackPacientes;
  108.     stackPacientes.push(juanito);
  109.     stackPacientes.push(maria);
  110.     stackPacientes.push(pedro);
  111.     stackPacientes.push(Paciente("Daniela", 34));
  112.     stackPacientes.push(Paciente("Marco", 28));
  113.  
  114.  
  115.     //utilizamos un heap para ordenar por edad
  116.     Heap<Paciente> pacientes;
  117.     while(!stackPacientes.empty()){
  118.         Paciente aux = stackPacientes.pop();
  119.         pacientes.agregar(aux, aux.getEdad());
  120.     }
  121.  
  122.     //traspamos la información ordenada del Heap al stack de datos
  123.     while(!pacientes.vacia()){
  124.         stackPacientes.push(pacientes.extraer());
  125.     }
  126.    
  127.     //mostramos la información en el stack, pero esta vez de forma ordenada
  128.     while(!stackPacientes.empty()){
  129.         stackPacientes.pop().ver();
  130.     }
  131.  
  132.     return 0;
  133. }
  134.  
  135.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement