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?


  • Mod

    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();
    

  • Mod

    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 🙂


Log in to reply