Ich habe eine std :: unordered_map, von der ich Elemente durch Iteration entfernen werde.Wie verhindere ich, dass beim Entfernen von Elementen eine std :: unordered_map erneut geöffnet wird?
auto itr = myMap.begin();
while (itr != myMap.end()) {
if (/* removal condition */) {
itr = myMap.erase(itr);
} else {
++itr;
}
}
Ich mag würde die Karte für die Durchführung keine teure Operationen verhindern, bis ich alle Elemente fertig bin zu entfernen, die ich entfernen müssen. Habe ich eine berechtigte Sorge? Missverstehe ich, wie der interne Speicher funktioniert?
Ich weiß, dass wir uns diese Frage 4 Jahre später ansehen, aber ich bin wirklich froh zu sehen, dass diese Antwort in den Mix passt. Wenn wir uns die Dokumentation noch einmal ansehen, ist es ziemlich klar, dass die am schlechtesten gestellte Komplexität nicht von einer möglichen Wiederverwendung, sondern von Hash-Kollisionen herrührt. Ich denke, das ist offiziell die richtige Antwort. – vmrob
so Tabelle kann nur wachsen.? –
Die Anzahl der Buckets in einem ungeordneten Container wird unter 'Erase' niemals verkleinert. Die Nummer darf unter 'rehash' schrumpfen, und alle Implementierungen werden dies tun. –