]> git.llucax.com Git - z.facultad/75.29/susanita.git/blobdiff - src/persona.h
Termina informe.
[z.facultad/75.29/susanita.git] / src / persona.h
index d46090a794b03ac52894e0bec62b229cb57bf007..6f44c887c5126eacd6b15b76e8a593c23c88752f 100644 (file)
@@ -5,13 +5,15 @@
 #include <string>
 #include <ostream>
 #include <istream>
 #include <string>
 #include <ostream>
 #include <istream>
+#include "hashtable.h"
 
 struct Persona
 {
        /// Tipos de listas
        typedef std::deque< Persona* > prefs_type;
        typedef std::deque< Persona* > ofertas_type;
 
 struct Persona
 {
        /// Tipos de listas
        typedef std::deque< Persona* > prefs_type;
        typedef std::deque< Persona* > ofertas_type;
-       typedef std::deque< Persona* > rechazos_type;
+       typedef HashTable rechazos_type;
+       typedef HashTable::size_type size_type;
 
        /// Estados posibles de una persona
        enum estado_type { SOLTERO, DECLARADO, COMPROMETIDO };
 
        /// Estados posibles de una persona
        enum estado_type { SOLTERO, DECLARADO, COMPROMETIDO };
@@ -20,14 +22,20 @@ struct Persona
        enum sexo_type { M, F };
 
        /// Constructor
        enum sexo_type { M, F };
 
        /// Constructor
-       Persona(const std::string& nombre, sexo_type sexo);
-       
+       Persona(const std::string& nombre, sexo_type sexo, size_type cap);
+
        /// Nombre de la persona, sólo con fines de representación
        std::string nombre;
 
        /// Nombre de la persona, sólo con fines de representación
        std::string nombre;
 
-       /// Lista de personas que prefiere, la primera de la lista es la
-       /// que mejor posicionada esta
+       /// Para la lista de personas que prefiere usamos dos estructuras: la
+       /// primera es una lista en donde el primer elemento es la persona
+       /// mejor posicionada; la segunda es un hash indexado por el nombre de
+       /// la persona, y como valor la posicion numerica.
+       /// Esta dualidad nos permite tener iteracion en orden, O(1) en
+       /// encontrar el mejor, y O(1) en ver quien es el preferido entre dos
+       /// personas.
        prefs_type prefs;
        prefs_type prefs;
+       HashTable<int> prefs_hash;
 
        /// Estado de la persona
        estado_type estado;
 
        /// Estado de la persona
        estado_type estado;
@@ -45,7 +53,7 @@ struct Persona
        rechazos_type rechazos;
 
        /// Función de comparación entre dos personas según nuestras prefs
        rechazos_type rechazos;
 
        /// Función de comparación entre dos personas según nuestras prefs
-       bool cmp(const Persona& p1, const Persona& p2) const;
+       int cmp(const Persona& p1, const Persona& p2) const;
 
        /// Ordenamos las ofertas según nuestras preferencias
        void ordenar_ofertas();
 
        /// Ordenamos las ofertas según nuestras preferencias
        void ordenar_ofertas();