map in map



  • Hallo zusammen,

    ich bekomme gleich einen Nervenzusammenbruch. Ich habe etwas so in der Art:

    std::map<double,std::map<int,std::string > > mapData;
    std::map<double,std::map<int,std::string > >::iterator outSideIt=mapData.begin();
    std::map<int,std::string >::iterator innerIt=mapData->second.begin();
    std::stringstream platzhalter;
    //nun möchte ich aus dieen mapData Werte auslesen:
    while(outSideIt != mapData.end()){
       while(innerIt != mapData->second.end(){
           if(innerIt->first <= time ){
                platzhalter.str("");
                platzhalter<<innerIt->first<<"\t"<<innerIt->second<<"\n";
                mapData->second.erase(innerIt++); //löscht weil kleiner
           }//end if-instruction
       }//end inner while
    }//end first while
    //..... löschen von leeren mapData->second Stellen worauf ich nicht eingehen möchte
    

    Kurz: es soll aus der inneren Map die Daten auslesen und die aktuellste Zeit mit Datum ausgeben. Aber bei einer Gleichheit funktioniert das nicht. Ich weiss echt nicht weiter woran das liegen könnte 😕



  • Das wird vermutlich daran liegen, dass du Fließkommazahlen als Key-Typ benutzt. Fließkommazahlen sind notgedrungen nicht hundertprozentig genau, wenn time also ein Rechenergebnis ist, wird es mit einiger Wahrscheinlichkeit etwas neben dem eigentlich richtigen Wert liegen.



  • sorry ich habe einen Fehler entdeckt. Es muss so lauten:

    std::map<int,std::map<double,std::string > > mapData;
    std::map<int,std::map<double,std::string > >::iterator outSideIt=mapData.begin();
    std::map<int,std::string >::iterator innerIt=mapData->second.begin();
    std::stringstream platzhalter;
    //nun möchte ich aus dieen mapData Werte auslesen:
    while(outSideIt != mapData.end()){
       while(innerIt != mapData->second.end(){
           if(innerIt->first <= time ){
                platzhalter.str("");
                platzhalter<<innerIt->first<<"\t"<<innerIt->second<<"\n";
                mapData->second.erase(innerIt++); //löscht weil kleiner
           }//end if-instruction
       }//end inner while
    }//end first while
    //..... löschen von leeren mapData->second Stellen worauf ich nicht eingehen möchte
    

    @seldon
    ich werde es ausprobieren. mal schauen ob ich dabei Erfolg haben werde 🙂 Danke



  • ahhhhhhh noch ein Fehler. Sorry für die 3-fach Post

    jetzt ist es Korrekt:

    std::map<int,std::map<double,std::string > > mapData;
    std::map<int,std::map<double,std::string > >::iterator outSideIt=mapData.begin();
    std::map<double,std::string >::iterator innerIt=mapData->second.begin();
    std::stringstream platzhalter;
    //nun möchte ich aus dieser mapData Werte auslesen:
    while(outSideIt != mapData.end()){
       while(innerIt != mapData->second.end(){
           if(innerIt->first <= time ){
                platzhalter.str("");
                platzhalter<<innerIt->first<<"\t"<<innerIt->second<<"\n";
                mapData->second.erase(innerIt++); //löscht weil kleiner
           }//end if-instruction
       }//end inner while
    }//end first while
    //..... löschen von leeren mapData->second Stellen worauf ich nicht eingehen möchte
    


  • Ist es evtl. vorteilhafter eine

    std::map<std::pair<int, double>, std::string>
    

    zu verwenden?



  • Danke ich werde mal schauen ob es damit lösbar ist. Für weitere Gedankenanstösse wäre ich dankbar 🙂


Log in to reply