Was ist der schnellste Weg, std :: unordered_map-Elemente einzufügen / zu aktualisieren, ohne ein if zu verwenden?
Momentan habe ich viel code, der wie folgt aussieht:
std::unordered_map<int,int> my_dict;
.
.
.
//If the key does exist in the dictionary
if(my_dict.count(key) == 1){
my_dict[key] = value;
}
//If its a new key
else{
my_dict.insert(std::make_pair(key,value));
}
Gibt es eine Möglichkeit, ich kann diese Fahrt nur durch überschreiben der Wert jedes mal?
InformationsquelleAutor der Frage user997112 | 2013-10-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Tun Sie nur (für
map
undunordered_map
)InformationsquelleAutor der Antwort Joe
Denke ich, es wäre am schnellsten so:
so dass Sie nicht ändern die Struktur des
unordered_map
wenn diekey
existiert bereits und Sie haben nur eine lookup.Anderen option falls Sie es nicht brauchen/Zugang
value
danach:Diese könnte besser sein, in Fällen, in denen die Zuordnung von
value
ist teuer und die Vorteile von move-Semantik.InformationsquelleAutor der Antwort Daniel Frey
Update für C++17, die Sie verwenden können:
http://en.cppreference.com/w/cpp/container/unordered_map/insert_or_assign
InformationsquelleAutor der Antwort htmlboss
In der Regel vermeiden Sie zusätzliche Eingabe durch die Definition einer Funktion, die speichert, die Sie von der Eingabe wieder das gleiche.
Wenn Sie keinen Zugang zu C++17
insert_or_assign()
Sie implementieren können, so etwas wie diese selbst:InformationsquelleAutor der Antwort Serge Rogatch