#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;
- 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 };
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<int> prefs_hash;
/// Estado de la persona
estado_type estado;
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();