X-Git-Url: https://git.llucax.com/z.facultad/75.29/susanita.git/blobdiff_plain/a86e26ae42584c979262de7f6ddefa815ac7c625..08496388378e6399c127cf6c569f411add13e9a7:/src/susanita.cpp?ds=sidebyside diff --git a/src/susanita.cpp b/src/susanita.cpp index 12cba02..02a15cb 100644 --- a/src/susanita.cpp +++ b/src/susanita.cpp @@ -1,17 +1,37 @@ #include "susanita.h" #include +#include +#include -Susanita::~Susanita() +Susanita:: +Susanita(size_type cap): + nombres(cap) +{ + capacidad = cap; +} + +// Uso interno +namespace +{ + /// Mata a una persona + void matar(Persona* p) + { + delete p; + } +} + +Susanita:: +~Susanita() { + std::for_each(hombres.begin(), hombres.end(), matar); + std::for_each(mujeres.begin(), mujeres.end(), matar); } void Susanita:: add_persona(Persona* pp) { - // XXX cual sería el problema que agregue una persona repetida? - // Reemplazaría a la anterior nomás - assert(nombres.find(pp->nombre) == nombres.end()); + assert(nombres[pp->nombre] == 0); // Muere si hay nombres repetidos nombres[pp->nombre] = pp; switch (pp->sexo) @@ -29,11 +49,50 @@ add_persona(Persona* pp) Persona* Susanita:: -get_persona(const std::string& nombre) const +get_persona(const std::string& nombre) { - nombres_type::const_iterator ip = nombres.find(nombre); - if (ip == nombres.end()) // No está - return 0; - return ip->second; + return (Persona *) nombres[nombre]; +} + +void +Susanita:: +mostrar_estado(int mostrar_prios) const +{ + personas_type::const_iterator ih; + std::cout << "Personas\n"; + for (ih = hombres.begin(); + ih != hombres.end(); ++ih) + std::cout << **ih << "\n"; + std::cout << "\n"; + for (personas_type::const_iterator im = mujeres.begin(); + im != mujeres.end(); ++im) + std::cout << **im << "\n"; + std::cout << "\n" << std::endl; + + if (mostrar_prios) + return; + + std::cout << "Prioridades\n"; + for (ih = hombres.begin(); + ih != hombres.end(); ++ih) { + Persona& h = **ih; + std::cout << h << "\n"; + for (personas_type::iterator im = h.prefs.begin(); + im != h.prefs.end(); ++im) { + Persona &p = **im; + std::cout << "\t" << p << "\n"; + } + } + std::cout << "\n"; + for (ih = mujeres.begin(); + ih != mujeres.end(); ++ih) { + Persona& h = **ih; + std::cout << h << "\n"; + for (personas_type::iterator im = h.prefs.begin(); + im != h.prefs.end(); ++im) { + Persona &p = **im; + std::cout << "\t" << p << "\n"; + } + } }