std::map



  • hallo
    mich würde interessieren was unterschiede dabei sind

    #include <map>
    std::map<std::string, int> mymap;
    
    ==== Werte zuweisen/einfügen ====
    
    // 1.Möglichkeit
    mymap["text"] = 1;
    
    // 2.Möglichkeit
    mymap.insert(make_pair("text", 1));
    
    // 3.Möglichkeit
    typedef pair<std::string, int> item;
    mymap.insert(item("test", 1));
    
    // 4.Möglichkeit
    typedef std::map<std::string, int> item;
    mymap.insert(item::value_type("text", 1));
    
    // 5.Möglichkeit
    std::map<std::string, int>::iterator iter;
    iter = mymap.find("text");
    iter->second = 1;
    
    ==== Werte auslesen ====
    int wert;
    
    // 1.Möglichkeit
    wert = mymap["text"];
    
    // 2.Möglichkeit
    std::map<std::string, int>::iterator iter;
    iter = mymap.find("text");
    wert = iter->second;
    

    mich interessiert vor allem, welche methoden sicherer sind, welche schneller bzw ob andere gibt...

    danke im vorraus!



  • Ich würde nahezu immer Möglichkeit 1 bevorzugen. Signifikante Geschwindigkeitsunterschiede sollten nicht feststellbar sein und daher ist die einfachste und am besten lesbare Möglichkeit zu bevorzugen. Die 2. Möglichkeit beim auslesen ist ganz praktisch, wenn man nicht weiß, ob das Element überhaupt in der Map ist, denn die kann auch einen ungültigen Iterator zurückgeben.



  • Die Antwort kann ich so nicht ganz stehen lassen. 🙂

    - Zuweisung
    Wenn der Wert schon in der map vorhanden ist, überschreibt der subscript-operator
    den alten durch den neuen Wert. Demgegenüber liefert der gleiche Versuch mit insert()
    einen "Fehler" (= map.end()). Das ist ja wohl ein signifikanter Unterschied.

    - Auslesen
    Ist der Wert noch nicht in der map vorhanden, liefert der subscript-operator
    einen "Leerwert" zurück, d.h. ein mittels Default-Konstruktor neu erzeugtes
    "Objekt". Demgegenüber liefert der gleiche Versuch mit find() einen "Fehler"
    (= map.end()). Auch das ist wohl ein signifikanter Unterschied.

    In diesem, Sinn immer schön überlegen was du brauchst, auch wenn die erste Version
    schöner aussieht.

    mfg JJ



  • EDIT: Achso, jetzt weiß ich was gemeint ist...


Anmelden zum Antworten