So entfernen Sie mehrere Artikel aus ungeordneten Karte während der Iteration über es?
Bitte betrachten Sie die folgende situation:
using namespace std;
unordered_map<int, vector<A>> elements;
Nun bin ich der Iteration über diese ungeordnete anzeigen:
for (auto it = elements.begin(); it != elements.end(); ++it)
Innerhalb der Schleife, ich bin Bildung von Clustern aus mehreren Elementen elements
(das aktuelle, das it
Punkte, und einige mehr, nicht unbedingt die nächsten in der Reihe!). Weil jedes element nur Teil eines Clusters, ich möchte zu löschen, diese aus der Karte und dann weiter mit dem nächsten element (d.h., den Bau der nächsten cluster).
Wie kann ich das tun, und noch weiter die iteration in der richtigen position?
InformationsquelleAutor der Frage Niko | 2013-03-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese Weise stellen Sie sicher, dass Sie nicht Schrittweite nach dem löschen und die alos, die Sie nicht erhöhen Sie die end().
Nach Anregungen, dass es kein guter Grundum für die Schleife, die nicht Schrittweite alles, was Sie wollen uns eine while-Schleife statt. Vor allem für mehr Lesbarkeit.
InformationsquelleAutor der Antwort
unordered_map::erase
zurück iterator Vergangenheit das gelöschte element.Möchten Sie, dass code, der entlang der Linien von:
Wichtiger Hinweis:Wenn Sie dabei sind, dieses innerhalb einer Schleife, werden Sie wollen, stellen Sie sicher, dass Sie vermeiden Sie die typischen Schrittweite von
it
am Ende der Schleife, wenn dies geschieht.InformationsquelleAutor der Antwort Drew Dormann
Den
löschen
Funktion liefert den iterator nach dem entfernten element (alle Sammlungenerase
Funktionen hat). Sie können es benutzen, um fortzufahren.Nur daran erinnern, um nicht zu erhöhen den iterator in dem Fall, wenn Sie löschen ein element, oder Sie wird Schritt für Schritt über ein element.
InformationsquelleAutor der Antwort Some programmer dude