map mit einer for-Schleife durchlaufen?

LadyMarion

Mitglied
Hallo,

ich habe mal wieder eine Frage:

Ich habe eine read-Funktion, die eine Datei zeilenweise in eine Map einliest.
Diese Map beginnt bei i=1 für die 1. Zeile, i=2 für die 2. Zeile, usw...

Jetzt gibt es aber in dem Programm Schleifen, die bei i=0 beginnen. Wenn nun innerhalb einer solchen Schleife die Map aufgerufen wird, habe ich nun immer i+1 statt i angegeben. So funktioniert es ja auch. Wenn das nun aber jemand vergisst mit dem i+1, dann wird eben bei 0 begonnen und die Map "falsch" eingelesen.

Dies kann ich aber doch nicht so einfach abfangen, oder? Weil wenn ein Wert (in diesem Fall 0) nicht vorhanden ist, wird dieser ja immer gleich neu angelegt?

Wenn ich nun die Schleifen so ändere, dass sie eben nicht mehr von 0 starten, sondern über Iteratoren laufen?

Also statt
Code:
for (int i = 0; i < lines.size(); i++) // lines.size() entspricht der Anzahl der Zeilen in der Datei
...
double test = mapname[i+1];
...
jetzt
Code:
for (iter = mapname.begin(); iter != mapname.end(); iter++)
...
double test = mapname[(*iter).first];
...

Ist das so besser? Oder kann ich sonst irgendwie ungültige Werte abfangen?
 
Ehm bist du sicher, dass du weiß wofür ne Map gedacht ist? Nen 2D Array auf 1D Array geblittet wäre gut :)
 
Hallo,

bei Maps sollte du schon die Iteratoren verwenden. Die for-Schleife klappt bei dir auch nur, weil du "int" als Key verwendest; bei anderen Typen geht das auf die Art sowieso nicht mehr. Außerdem sind die Iteratoren effizienter, weil du nicht mehr selbst in jedem Schleifendurchlauf derefenzieren musst. Deshalb solltest du übrigens auch besser schreiben:
C++:
double test = iter->second;
Gruß
MCoder
 
Zurück