X-Git-Url: https://git.llucax.com/z.facultad/75.29/susanita.git/blobdiff_plain/e712cf784660fb25651128c4626c9c337a9ae7ce..7c555835b280bcbc38f170ba3b0afc33b1be43c7:/src/persona.h diff --git a/src/persona.h b/src/persona.h index d46090a..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();