Ich habe eine unordered_map, die den int als Schlüssel einen Zeiger als Wert speichert. Ich muss die Existenz des Schlüssels überprüfen. Wenn der Schlüssel nicht verfügbar ist, muss ich den Schlüssel und den Wert einfügen. Welcher ist der bessere Ansatz?Grundfrage beim Zuweisen von Wert zu unordered_map
Danke.
unordered_map<int, classA*>testMap;
classA* ptr = testMap[1];
if(ptr == NULL)
testMap[1] = new classA;
OR
unordered_map<int, classA*>::iterator it = testMap.find(1);
if(it == testMap.end())
{
testMap.insert(make_pair(1, new classA));
}
Ich würde vorschlagen, dass Sie Ihre dynamisch erstellten 'classA'-Instanzen in einem' std :: shared_ptr' speichern: 'std :: unordered_map>'. Sie können die Instanzen mit 'std :: make_shared (... ctr params ...)' erstellen. Dies entlastet Sie von den Sorgen über Ressourcenlecks. –
Der erste Ansatz oder die Variante, die das zweite Nachschlagen vermeidet, ist möglicherweise besser, wenn Sie mit Sicherheit sagen können, dass in der Map niemals gültige Nullzeiger vorhanden sind. Da Sie diese Voraussetzung jedoch nicht angegeben haben, würde ich mich für den zweiten, sicheren Ansatz entscheiden. Sie können die Funktion count() verwenden, anstatt die lokale Variable it zu finden und/oder loszuwerden, um den Code zu löschen. –