Ihre Kanten sind in einem std :: vector gespeichert. Wenn Sie N Scheitelpunkte haben, werden alle Scheitelpunkte von 0 bis N nummeriert. Wenn Sie einen Scheitelpunkt löschen, werden Ihre Scheitelpunkte von 0 bis N-1 neu nummeriert. Daher wird Ihr Deskriptor ungültig gemacht.
Es könnte jedoch eine Arbeit nahe sein: - von N iterieren bis 0 - testen Sie Ihre Knoten und löschen Sie es dann notwendig, wenn
Dies setzt (und ich bin nicht sicher, aber eher zuversichtlich), dass Es nummeriert nur die Vertices nach die Sie gerade gelöscht haben.
Wenn Sie diese Manipulation sehr oft machen, kann es abhängig von der Größe Ihres Diagramms ziemlich langsam sein.
Wenn dieser Ansatz nicht funktioniert, müssen Sie ein neues Diagramm aus dem alten erstellen (indem Sie vorberechnen, wie viele Scheitelpunkte und Kanten Sie haben werden, könnte dies tatsächlich sehr schnell sein).
Also, tut mir leid, keine echte Antwort, aber ich hoffe, du schaffst es, etwas daraus zu machen.
Das Problem mit listS ist, dass ich connected_components nicht bekommen kann, um damit zu arbeiten. http://stackoverflow.com/questions/3183186/perform-connected-components-with-boost-adjacency-list-where-vertexlistlists –