<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Vektor effizient löschen]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich habe 2 Datenstrukturen:</p>
<pre><code class="language-cpp">class Sector {
   int sectorID;
   vector&lt;int&gt;  objects;  // vector of object IDs
};

map&lt;int, vector&lt;int&gt; &gt; objectMap; // Key: object ID, value: List of Sector IDs
</code></pre>
<p>Ein 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)</p>
<p>So, nun kriege ich als Input eine Liste mit SectorS, z.B. 2 Stück:</p>
<blockquote>
<p>Sector[0] = { sectorID=2, objects={4, 39, 102} };<br />
Sector[1] = { sectorID=11, objects={4, 443, 1008, 99} }</p>
</blockquote>
<p>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.<br />
Im Beispiel oben will ich also quasi das machen:</p>
<pre><code class="language-cpp">objectMap[4].clear();  objectMap[39].clear(); etc..
</code></pre>
<p>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.<br />
Ist das performant oder geht das besser?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/285660/vektor-effizient-löschen</link><generator>RSS for Node</generator><lastBuildDate>Fri, 21 Aug 2026 06:03:42 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/285660.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 25 Apr 2011 15:44:16 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Vektor effizient löschen on Mon, 25 Apr 2011 15:44:16 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich habe 2 Datenstrukturen:</p>
<pre><code class="language-cpp">class Sector {
   int sectorID;
   vector&lt;int&gt;  objects;  // vector of object IDs
};

map&lt;int, vector&lt;int&gt; &gt; objectMap; // Key: object ID, value: List of Sector IDs
</code></pre>
<p>Ein 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)</p>
<p>So, nun kriege ich als Input eine Liste mit SectorS, z.B. 2 Stück:</p>
<blockquote>
<p>Sector[0] = { sectorID=2, objects={4, 39, 102} };<br />
Sector[1] = { sectorID=11, objects={4, 443, 1008, 99} }</p>
</blockquote>
<p>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.<br />
Im Beispiel oben will ich also quasi das machen:</p>
<pre><code class="language-cpp">objectMap[4].clear();  objectMap[39].clear(); etc..
</code></pre>
<p>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.<br />
Ist das performant oder geht das besser?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2054045</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2054045</guid><dc:creator><![CDATA[Vektorianer]]></dc:creator><pubDate>Mon, 25 Apr 2011 15:44:16 GMT</pubDate></item><item><title><![CDATA[Reply to Vektor effizient löschen on Mon, 25 Apr 2011 15:58:16 GMT]]></title><description><![CDATA[<p>Die doppelte Suche könntest du vermeiden, indem du die einzelnen Listen per set_union() zu einer zusammenfasst.<br />
Ansonsten: Willst du die angegebenen Einträge komplett löschen oder nur zurücksetzen? Wenn ersteres, ist vielleicht map::erase() praktischer.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2054051</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2054051</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 25 Apr 2011 15:58:16 GMT</pubDate></item></channel></rss>