Vektor effizient löschen
-
Hallo!
Ich habe 2 Datenstrukturen:
class Sector { int sectorID; vector<int> objects; // vector of object IDs }; map<int, vector<int> > objectMap; // Key: object ID, value: List of Sector IDsEin Sector hat eine Liste mit Objekt IDs (die sich im Sektor befinden). Und die Map hat als Key eine Object ID und als Value einen Vektor mit Sector IDs (in denen sich das Objekt befindet)
So, nun kriege ich als Input eine Liste mit SectorS, z.B. 2 Stück:
Sector[0] = { sectorID=2, objects={4, 39, 102} };
Sector[1] = { sectorID=11, objects={4, 443, 1008, 99} }Jetzt will ich die Map bearbeiten und für alle Object IDs, die in den Sectors vorkommen die Vektoren (sprich den Value) der Map löschen.
Im Beispiel oben will ich also quasi das machen:objectMap[4].clear(); objectMap[39].clear(); etc..Wenn ich das naiv mache und durch die Sectors iteriere und immer die Map für ein Object lese und dann clear() mache, habe ich ja ständig einmal operator[] der Map (quasi O(logn)) und dann noch ein clear() - oft mehrmals. z.B. müsste würde ich im Beispiel 2mal objectMap[4].clear() aufrufen.
Ist das performant oder geht das besser?
-
Die doppelte Suche könntest du vermeiden, indem du die einzelnen Listen per set_union() zu einer zusammenfasst.
Ansonsten: Willst du die angegebenen Einträge komplett löschen oder nur zurücksetzen? Wenn ersteres, ist vielleicht map::erase() praktischer.