Mit for (const auto) auf einen std::vector zugreifen, der sich in einer std::map befindet



  • Hallo zusammen,

    ich habe in meinem Code folgendes Konstrukt.

    In einer Klasse werden alle meine Datein gespeichert, dort ist dann auch mitunter eine std::map, die einen std::string und einen einen std::vectorstd::string enthält:

    std::map<std::string, std::vector<std::string>*> Init_Values_Sequence;
    

    Diese wird dann an einer anderen Stelle befüllt:

    OP->Init_Values_Sequence.insert(std::make_pair("Colormix", new std::vector<std::string>));
    
    OP->Init_Values_Sequence["Colormix"]->push_back(msclr::interop::marshal_as<std::string>("D" + Sequence->Rows[x]->ItemArray[0] + "," + Sequence->Rows[x]->ItemArray[1] + "," + Sequence->Rows[x]->ItemArray[2] + "," + Sequence->Rows[x]->ItemArray[3] + "," + Sequence->Rows[x]->ItemArray[4] + "," + Sequence->Rows[x]->ItemArray[5] + "\n"));
    

    Soweit scheint das auch alles zu funktionieren.
    Jedoch habe ich dann beim Nächsten Schritt Probleme, die Daten wieder aus dem Vector raus zu bekommen.

    for (const auto Line_Squence : OP->Init_Values_Sequence["Colormix"]) {
        ...
    }
    

    Die for Schleife hat damit ein Problem, Sie kann keinen Anfang "Beginn" finden.
    Wie kann ich das Problem lösen ?

    Danke für eure Hilfe.



  • @Wolly300 sagte in Mit for (const auto) auf einen std::vector zugreifen, der sich in einer std::map befindet:

    OP->Init_Values_Sequence["Colormix"]

    Das ist kein vector, sondern ein Zeiger auf einen vector. Die Schleife kann also nicht darüber iterieren. Vielleicht wolltest du ihn dereferenzieren, vielleicht solltest du dich aber auch mal der Frage stellen, warum das überhaupt ein Zeiger sein muss. Das naheliegende wäre doch, Vektoren in die map zu packen.



  • Zunächst mal lohnt es sich, zu hinterfragen, warum dort ein Pointer zum Einsatz kommt. Ich vermute mal, dass hier in Wirklichkeit kein Pointer nötig ist und damit wäre dann das Problem auch gelöst.


Log in to reply