PDA

View Full Version : C++ Problema con gli iteratori di std::map


Mohegan
24-12-2013, 11:21
Salve ragazzi, in un progetto per l'università mi sono imbattuto in questo problema, una volta definito un iteratore costante, il ciclo su tutta la mappa non viene fatto della dimensione corretta, cioè, nella classe document, c'è una bag of words implementata così:
std::map<std::string,int> bag;
una volta caricata con un documento, la mappa ha dimensione 175, ma il ciclo nel seguente codice viene ripetuto solamente 91 volte, come mai?? :muro:
//Put doc.bag in stream
void DocToStream(std::fstream& stream, document& doc)
{
std::map<std::string,int>::const_iterator iter;
uint i_t=0x00;
iter=doc.GetBag().begin();
stream<<doc.GetName();
stream<<" ";
stream<<doc.GetSize();
stream<<" ";
stream<<doc.GetClass();
stream<<" ";
for(;iter!=doc.GetBag().end();++iter)
{
stream<<iter->first;
stream<<" ";
std::cout<<(i_t++)<<std::endl;
stream<<iter->second;
stream<<" ";
}
}
Date per scontato che la dimensione 175 è quella effettiva, e non sto sbagliando a calcolarla, inoltre non ci sono problemi per questa chiamata a funzione, grazie in anticipo per l'aiuto

Mohegan
24-12-2013, 11:40
Ho risolto scrivendo dei metodi nella classe document che mi restituissero bag.begin() e bag.end() poi nel ciclo ho usato quelli e ha funzionato tutto, qualcuno mi sa comunque dire da cosa dipendeva quel problema?