void leerficheroSP(Dispersion<StructPost>& disp, const string& nfichero, const bool& cabecera) {
    string aux_str;
    ifstream f;
    f.open(nfichero.c_str());

    if (f.good()) {
        if (cabecera && !f.eof()) {
            getline(f,aux_str);
        }
        while (getline(f,aux_str)) {
            CodigoPost cp;
            aux_str=cp.fromCSV(aux_str);
            StructPost* existente=disp.buscar(hash_djb2(aux_str.c_str()));
            if (existente) {
                existente->codigos.insertarFin(cp);
            } else {
                StructPost sp={aux_str};
                sp.codigos.insertarFin(cp);
                disp.insertar(hash_djb2(aux_str.c_str()),sp);
            }
        }
    }

    f.close();
}
void Aplicacion6::mostrarDetallesCiudad(Dispersion<StructPost> &disp, string nombreCiudad) {
	unsigned long int clave;
	clave = djb2(nombreCiudad);
	StructPost* c = disp.buscar(clave);
	if(c == 0){
		cout << "Ciudad " << nombreCiudad<<" no encontrada." << endl;
		return;
	}
	EEDD::Iterador<CodigoPost*>* itLineas;
	itLineas = c->getListadoCodigos().iteradorIni();
	cout << "Zipcode\tZipCodeType\tCity\t\tState\tLocationType\tLat\tLong\tLocation\tDecommisioned\tTaxReturnsFiled\tEstimatedPopulation\tTotalWages" << endl;
	while(itLineas->haySiguiente()){
		cout << itLineas->dato()->getZipCode() << "\t";
		cout << itLineas->dato()->getZipCodeType() << "\t";
		cout << itLineas->dato()->getCity() << "\t\t";
		cout << itLineas->dato()->getState() << "\t";
		cout << itLineas->dato()->getLocationType() << "\t";
		cout << itLineas->dato()->getLat() << "\t";
		cout << itLineas->dato()->getLon() << "\t";
		cout << itLineas->dato()->getLocation() << "\t";
		cout << itLineas->dato()->getDecommisioned() << "\t";
		cout << itLineas->dato()->getTaxReturnsFiled() << "\t";
		cout << itLineas->dato()->getEstimatedPopulation() << "\t";
		cout << itLineas->dato()->getTotalWages() << endl;
		itLineas->siguiente();
	}

}
void Aplicacion6::cargarTablaDispersion(Dispersion<StructPost> &disp) {
	cout << "Iniciando carga de la tabla de Dispersión." << endl;
	long int tIni = time(0);
	CargadorDatos cd;
	CodigoPost* d;
	unsigned long clave = 0;
	d=cd.siguienteDetalle();
	while(d != 0){
		clave = djb2(d->getCity());
		//si la ciudad no está aún en el árbol la creo.
		if (disp.buscar(clave) == 0){
			StructPost c;
			c.setNombreCiudad(d->getCity());
			disp.insertar(clave,c);
		}
		disp.buscar(clave)->getListadoCodigos().insertarFin(d);
		d=cd.siguienteDetalle();
	}
	long int tFin = time(0);
	cout << "Número máximo de colisiones: " << disp.maxI << endl;
	cout << "Tabla de dispersión cargada(" << (tFin-tIni) << " segs)."<< endl;
}