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...