std::map begin inkrementieren?
-
Hallo,
warum funktioniert folgender Code bei dem vector aber nicht bei einer map?
std::map<std::string, int> my_map; std::vector<std::string> my_vec; for (std::map<std::string, int>::iterator i = my_map.begin() + 1; i != my_map.end(); i++) // Fehler hier ; for (std::vector<std::string>::iterator i = my_vec.begin() + 1; i != my_vec.end(); i++) // Das hier geht aber ;
Ich will gerne über eine map iterieren, aber eben nicht von Anfang an, sondern erst ab dem zweiten (n-ten) Element an... Bei vector hat das wie oben gepostet auch immer problemlos geklappt, warum geht das bei map nicht?
-
Undefiniertes Verhalten wird durch beide Schleifen erzeugt. Falls du das so machen willst, dann solltest du vorher einfach testen, ob die Größe > 1 ist.
-
for (std::map<std::string, int>::iterator i = std::next(my_map.begin()); i != my_map.end(); i++) // Kein Fehler
-
Der Ausdruck
my_map.begin() + 1;
funktioniert nicht. Da die Map keine Random-access iteratoren hat sondern nur bidirektionale, kann man damit keine Arithmetik machen. Nimm statdessen einfach
++my_map.begin();
-
Achso, lol, er weiß nicht wie er das überhaupt inkrementieren soll? Dachte der Fehler liegt woanders, entschuldigt.
-
next pleeze schrieb:
for (std::map<std::string, int>::iterator i = std::next(my_map.begin()); i != my_map.end(); i++) // Kein Fehler
TNA schrieb:
Der Ausdruck
my_map.begin() + 1;
funktioniert nicht. Da die Map keine Random-access iteratoren hat sondern nur bidirektionale, kann man damit keine Arithmetik machen. Nimm statdessen einfach
++my_map.begin();
Verdammte Iteratoren
Vielen Dank, funktioniert
Arcoth schrieb:
Achso, lol, er weiß nicht wie er das überhaupt inkrementieren soll?
Ja, das war das Problem