X-Git-Url: https://git.llucax.com/z.facultad/75.29/susanita.git/blobdiff_plain/a86e26ae42584c979262de7f6ddefa815ac7c625..HEAD:/src/persona.h?ds=sidebyside diff --git a/src/persona.h b/src/persona.h index 925cdff..6f44c88 100644 --- a/src/persona.h +++ b/src/persona.h @@ -5,13 +5,15 @@ #include #include #include +#include "hashtable.h" 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 }; @@ -20,14 +22,20 @@ struct Persona 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; - /// 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; + HashTable prefs_hash; /// 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 - 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(); @@ -56,7 +64,12 @@ struct Persona /// Nos comprometemos con la persona p, quien se nos habia declarado /// previamente void comprometer_con(Persona& p); - + + // Nos comprometemos con la otra persona y a ella la comprometemos con nosotros + void comprometer_con_bt(Persona& p); + + // Rompemos el compromiso + void romper_compromiso(Persona& p); }; /// Para representación