Fragen zur std::map



  • Hallo!

    Wenn ich solch eine Map habe:

    map<int, string> foo;

    Und ich füge immer wieder Element hinzu:

    inline void Bla(int value, string str)
    {
    foo[value] = str;
    }
    

    Lässt diese Map doppelte Werte zu? Wenn es schon ein Element mit dem Schlüssel value gibt, was passiert dann? Lässt sich feststellen ob versucht wurde ein Element zweimal zu einer map hinzuzufügen?



  • SchönesBlauImForum schrieb:

    Hallo!

    Wenn ich solch eine Map habe:

    map<int, string> foo;

    Und ich füge immer wieder Element hinzu:

    inline void Bla(int value, string str)
    {
    foo[value] = str;
    }
    

    Lässt diese Map doppelte Werte zu?

    Zu jedem Key gibt es höchstens einen Wert.

    Wenn es schon ein Element mit dem Schlüssel value gibt, was passiert dann?

    Der wird dann mit dem neuen überschrieben, indem der assignment operator aufgerufen wird. Dies geschieht auf jeden Fall, da foo[value] bereits ein Element erzeugt, wenn es noch nicht drin ist.

    Lässt sich feststellen ob versucht wurde ein Element zweimal zu einer map hinzuzufügen?

    Die Form "foo[value] = str;" ist nicht geeignet Werte kontrolliert in eine Map anzufügen. Besser ist es foo.insert( std::make_pair(value, str) ) zu benutzen.

    inline void Bla(int value, string str)
    {
       std::pair<int, string> t(value,str);
       std::pair< std::map<int, string>::iterator , bool> ret = foo.insert(t);
       if (ret.second == false) {
          std::cout << "Wert schon vorhanden" << std::endl;
          //Trotzdem einfuegen
          ret.first->second = str;
       }
    }
    


  • Gut, dann hab ich nicht umsonst den Fall abgefangen falls ein Element+Key ausversehen 2x hinzugefügt wird, danke 🙂



  • Falls ein Wert mehrmals vorkommen können soll gibts ja auch noch die multimap


Anmelden zum Antworten