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