#include "susanita.h"
#include <cassert>
#include <iostream>
+#include <algorithm>
-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)
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() const
+mostrar_estado(int mostrar_prios) const
{
- for (personas_type::const_iterator ih = hombres.begin();
+ personas_type::const_iterator ih;\r
+ std::cout << "Personas\n";
+ for (ih = hombres.begin();
ih != hombres.end(); ++ih)
std::cout << **ih << "\n";
std::cout << "\n";
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";
+ }
+ }
}