std::map default-Wert
Gibt es eine Möglichkeit, geben Sie den Standardwert std::map
's operator[]
zurückgibt, wenn ein Schlüssel nicht vorhanden ist?
InformationsquelleAutor der Frage anon | 2010-02-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nein, gibt es nicht. Die einfachste Lösung ist, ein eigenes zu schreiben Kostenlose Vorlage-Funktion, dies zu tun. So etwas wie:
C++11-Update
Zweck: Konto für Allgemeine assoziative Container, sowie optional Komparator und-Zuweisung-Parameter.
InformationsquelleAutor der Antwort
Während dieses nicht genau die Frage beantworten, ich habe das problem umgangen mit code wie diesem:
InformationsquelleAutor der Antwort SurvivalMachine
Den C++ - standard (23.3.1.2) gibt an, dass der neu eingefügte Wert ist Standard gebaut, so
map
selbst ist nicht ein Weg, es zu tun. Ihre Auswahlmöglichkeiten sind:operator[]
zu legen, dass Standard.InformationsquelleAutor der Antwort Mike Seymour
InformationsquelleAutor der Antwort Thomas Eding
Allgemeinere Version, die Unterstützung von C++98/03 und Mehr Container
Arbeitet mit generischen assoziative Container, die nur template-parameter ist der container-Typ selbst.
Unterstützten Container:
std::map
std::multimap
std::unordered_map
std::unordered_multimap
wxHashMap
QMap
QMultiMap
QHash
QMultiHash
etc.Verwendung:
Hier ist eine ähnliche Umsetzung durch die Verwendung einer wrapper-Klasse, die ist ähnlich wie die Methode
get()
vondict
Typ in Python: https://github.com/hltj/wxMEdit/blob/master/src/xm/xm_utils.hppVerwendung:
InformationsquelleAutor der Antwort jyw
Gibt es keine Möglichkeit zu geben Sie den Standardwert, es ist immer wieder Wert, gebaut von der Standardeinstellung (null-parameter-Konstruktor).
In der Tat
operator[]
wahrscheinlich nicht mehr als Sie erwarten, da, wenn noch kein Wert für den angegebenen Schlüssel in der map, es wird legen Sie eine neue mit dem Wert aus der Standard-Konstruktor.InformationsquelleAutor der Antwort Michael Anderson
C++17
try_emplace
die genau das tut. Es nimmt einen Schlüssel und eine Liste von Argumenten für die Wert-Konstruktor und gibt ein paar: einiterator
und einbool
.: http://en.cppreference.com/w/cpp/container/map/try_emplaceInformationsquelleAutor der Antwort Ben
Der Wert wird initialisiert mit dem default-Konstruktor, wie die anderen Antworten sagen. Allerdings ist es nützlich hinzuzufügen, dass im Falle der einfachen Datentypen (Integrale Typen wie int, float, Zeiger-oder POD (plan-alte Daten -) Typen), die Werte werden auf null initialisiert (oder genullt von Wert-Initialisierung (das ist effektiv die gleiche Sache), je nachdem, welche version von C++ verwendet wird).
Sowieso, die bottomline ist, dass Karten mit einfachen Typen werden null-Initialisierung der neuen Elemente automatisch. In einigen Fällen gibt es keine Notwendigkeit, sorgen über die explizite Angabe der default-Anfangswert.
Sehen Tun die Klammern nach dem Typnamen einen Unterschied machen, mit neue? für mehr details über die Angelegenheit.
InformationsquelleAutor der Antwort the swine
Vielleicht können Sie geben einen benutzerdefinierten Zuweisung die Zuweisung mit einem Standard-Wert, den Sie wollen.
InformationsquelleAutor der Antwort VDVLeon