13 typedef std::deque< Persona* > prefs_type;
14 typedef std::deque< Persona* > ofertas_type;
15 typedef HashTable rechazos_type;
16 typedef HashTable::size_type size_type;
18 /// Estados posibles de una persona
19 enum estado_type { SOLTERO, DECLARADO, COMPROMETIDO };
22 enum sexo_type { M, F };
25 Persona(const std::string& nombre, sexo_type sexo, size_type cap);
27 /// Nombre de la persona, sólo con fines de representación
30 /// Para la lista de personas que prefiere usamos dos estructuras: la
31 /// primera es una lista en donde el primer elemento es la persona
32 /// mejor posicionada; la segunda es un hash indexado por el nombre de
33 /// la persona, y como valor la posicion numerica.
34 /// Esta dualidad nos permite tener iteracion en orden, O(1) en
35 /// encontrar el mejor, y O(1) en ver quien es el preferido entre dos
38 HashTable<int> prefs_hash;
40 /// Estado de la persona
46 /// De estar declarado o comprometido, quien es su pareja
49 /// Lista de la gente que se le declaro
52 /// Lista de la gente que lo rechazo
53 rechazos_type rechazos;
55 /// Función de comparación entre dos personas según nuestras prefs
56 int cmp(const Persona& p1, const Persona& p2) const;
58 /// Ordenamos las ofertas según nuestras preferencias
59 void ordenar_ofertas();
61 /// Nos declaramos a la persona p
62 void declarar_a(Persona& p);
64 /// Nos comprometemos con la persona p, quien se nos habia declarado
66 void comprometer_con(Persona& p);
68 // Nos comprometemos con la otra persona y a ella la comprometemos con nosotros
69 void comprometer_con_bt(Persona& p);
71 // Rompemos el compromiso
72 void romper_compromiso(Persona& p);
75 /// Para representación
76 std::ostream& operator<< (std::ostream& os, const Persona::estado_type e);
78 /// Para representación
79 std::ostream& operator<< (std::ostream& os, const Persona& p);