X-Git-Url: https://git.llucax.com/z.facultad/75.29/susanita.git/blobdiff_plain/6aea046810bf0297362fc14ac3af3a6cb8b856cd..9e8e3ba3417b7d29636391e701ec505ff9aa0080:/src/persona.cpp?ds=sidebyside diff --git a/src/persona.cpp b/src/persona.cpp index c93b069..0016f3e 100644 --- a/src/persona.cpp +++ b/src/persona.cpp @@ -5,7 +5,8 @@ /// Constructor Persona:: Persona(const std::string& nombre, sexo_type sexo, size_type cap): - nombre(nombre), estado(SOLTERO), sexo(sexo), pareja(0), rechazos(cap) + nombre(nombre), prefs_hash(cap), estado(SOLTERO), sexo(sexo), + pareja(0), rechazos(cap) { } @@ -60,15 +61,14 @@ operator<< (std::ostream& os, const Persona& p) /// Función de comparación entre dos personas según nuestras preferencias int Persona:: -cmp(const Persona& p1, const Persona& p2) const // O(N) +cmp(const Persona& p1, const Persona& p2) const // O(1) { - prefs_type::const_iterator pos_p1 - = std::find(prefs.begin(), prefs.end(), &p1); // O(N) - prefs_type::const_iterator pos_p2 - = std::find(prefs.begin(), prefs.end(), &p2); // O(N) - if (pos_p1 < pos_p2) + int i1 = prefs_hash.get(p1.nombre); // O(1) + int i2 = prefs_hash.get(p2.nombre); // O(1) + + if (i1 < i2) return 1; - if (pos_p1 == pos_p2) + if (i1 == i2) return 0; return -1; } @@ -92,11 +92,11 @@ namespace /// Ordenamos las ofertas segun nuestras preferencias void Persona:: -ordenar_ofertas() // O(N^2.log(N^2)) +ordenar_ofertas() // O(N.log(N)) { // este sort es in-place y O(N.log(N)) // Más info en: http://www.sgi.com/tech/stl/sort.html - // Pero el PersonaCmp() es O(N) + // PersonaCmp() es O(1), asi que el orden es el mismo. std::sort(ofertas.begin(), ofertas.end(), PersonaCmp(*this)); }