2016-08-02 34 views
-1
typedef struct 
{ 
string idArtigo; 
string tituloArtigo; 
string veiculoPublicacao; 
vector<string> autores; 
}Publicacao; 

Ich habe einen Vektor wie:Mit multimap und struct in C++

vector<Publicacao> pub(1000); 

und:

multimap<int,Publicacao> multimapa; 
multimap<int,Publicacao>::iterator it; 

Im mit Einsatz hinzuzufügen:

multimapa.insert (pair<int,Publicacao>(i,p[i])); 
multimapa.insert (pair<int,Publicacao>(i,p[j])); 

Das Problem ist, , wenn ich drucke, kann ich nicht die Vektorautoren der Struktur, nur die andere Variable drucken s, wie:

for (it=multimapa.begin(); it!=multimapa.end(); ++it) 
    { 
    arquivoResultado<<"Codigo Unico: "<< (*it).first<<endl; //works 
    arquivoResultado<<"Titulo: "<<(*it).second.tituloArtigo<<endl; //works 
    arquivoResultado<<"Autores: "<<endl; // works 
    for(i=0; (*it).second.autores.size(); i++) // NOT WORKS 
    { 
     arquivoResultado<<(*it).second.autores[i]<<" "; //FAIL EXECUTION 

    } 
    arquivoResultado <<"\nVeiculo: "<<(*it).second.veiculoPublicacao<<endl;        
} 

Nur der Vektor der Struktur haben ein Problem in der Ausführungszeit, und ich habe keine Ahnung warum.

+0

Vermissen Sie nicht irgendeine Syntax? Wie 'i <(* it) .second.autores.size();' –

+0

nicht einmal arquivoResultado << (* it) .second.autores [0]; funktioniert, als wäre etwas nicht in Ordnung und kann diesen Gegenstand nicht erreichen, oder ich vermisse die richtige Syntax wirklich. –

+0

Könnten Sie einen [MCVE] bereitstellen? –

Antwort

3

Die Struktur Ihrer for loop ist nicht vollständig. Es sollte so etwas wie folgt aussehen:

for(int i = 0; i < (*it).second.autores.size(); i++) // missing "i < " and the declaration of i 
{ 
    arquivoResultado << (*it).second.autores[i] << " "; 
} 
1

In Ihrer Probe Sie Schleife, während die Größe des Vektors größer als Null war, was immer wahr oder falsch sein. Wie Sie in Ihrem Kommentar geschrieben haben, nachdem Sie ihn in eine Schleife geändert haben, während der Index kleiner als die Größe war, hat er richtig funktioniert.