<?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[hash_multimap erase, Gültigkeit von Iteratoren]]></title><description><![CDATA[<p>Ich habe eine hash_multimap, aus der ich Elemente entfernen will. Auswahlkriterium ist der value, d.h. alle Elemente mit value x sollen entfernt werden. Ich habe die naive Variante versucht, d.h. in einer for Schleife mit einem Iterator über die Elemente gehen und wenn value entspechend erase(it) aufrufen. Das geht nicht, hab ich gemerkt; momentan bin ich bei folgender Lösung:</p>
<pre><code class="language-cpp">//( _adjcs -&gt; hash_multimap,edge_itr_del -&gt; hash_multimap::iterator)
edge_itr_del it = _adjcs.begin();

while(it != _adjcs.end())
{
	if((*it).second == vertex)
	{
		_adjcs.erase(it);
		it = _adjcs.begin();
	}
	else{++it;}
}
</code></pre>
<p>Allerdings ist das wirklich hässlich. Gibts evtl. ne elegantere / effizientere Variante?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/133967/hash_multimap-erase-gültigkeit-von-iteratoren</link><generator>RSS for Node</generator><lastBuildDate>Fri, 28 Aug 2026 07:46:31 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/133967.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 22 Jan 2006 17:45:07 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to hash_multimap erase, Gültigkeit von Iteratoren on Sun, 22 Jan 2006 17:45:07 GMT]]></title><description><![CDATA[<p>Ich habe eine hash_multimap, aus der ich Elemente entfernen will. Auswahlkriterium ist der value, d.h. alle Elemente mit value x sollen entfernt werden. Ich habe die naive Variante versucht, d.h. in einer for Schleife mit einem Iterator über die Elemente gehen und wenn value entspechend erase(it) aufrufen. Das geht nicht, hab ich gemerkt; momentan bin ich bei folgender Lösung:</p>
<pre><code class="language-cpp">//( _adjcs -&gt; hash_multimap,edge_itr_del -&gt; hash_multimap::iterator)
edge_itr_del it = _adjcs.begin();

while(it != _adjcs.end())
{
	if((*it).second == vertex)
	{
		_adjcs.erase(it);
		it = _adjcs.begin();
	}
	else{++it;}
}
</code></pre>
<p>Allerdings ist das wirklich hässlich. Gibts evtl. ne elegantere / effizientere Variante?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/973034</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/973034</guid><dc:creator><![CDATA[O_o]]></dc:creator><pubDate>Sun, 22 Jan 2006 17:45:07 GMT</pubDate></item><item><title><![CDATA[Reply to hash_multimap erase, Gültigkeit von Iteratoren on Sun, 22 Jan 2006 18:07:06 GMT]]></title><description><![CDATA[<p>hash_map und hash_multimap sind nicht im c++ standard enthalten und dementsprechend unterscheiden sich diese von hersteller zu hersteller</p>
]]></description><link>https://www.c-plusplus.net/forum/post/973057</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/973057</guid><dc:creator><![CDATA[Any]]></dc:creator><pubDate>Sun, 22 Jan 2006 18:07:06 GMT</pubDate></item><item><title><![CDATA[Reply to hash_multimap erase, Gültigkeit von Iteratoren on Sun, 22 Jan 2006 18:23:48 GMT]]></title><description><![CDATA[<p>Ja, bedauerlicher Weise. Ich verwende im Moment die aus der mingw Bibliothek, sprich GNU.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/973086</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/973086</guid><dc:creator><![CDATA[O_o]]></dc:creator><pubDate>Sun, 22 Jan 2006 18:23:48 GMT</pubDate></item><item><title><![CDATA[Reply to hash_multimap erase, Gültigkeit von Iteratoren on Mon, 23 Jan 2006 07:18:14 GMT]]></title><description><![CDATA[<p>Aber eins gilt afaik für (fast) alle Container - der Iterator, den du löschst, wird auf jeden Fall ungültig.</p>
<p>Eine schnellere Variante wäre es sicher, die zu löschenden Elemente mit der find()-Methode (oder, wenn vorhanden, mit equal_range()) der Hash-Map zu finden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/973577</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/973577</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 23 Jan 2006 07:18:14 GMT</pubDate></item><item><title><![CDATA[Reply to hash_multimap erase, Gültigkeit von Iteratoren on Mon, 23 Jan 2006 09:29:54 GMT]]></title><description><![CDATA[<p>Soweit ich die hash_multimap verstanden habe, kann man da nach Schlüsseln suchen (es gibt find(), auch equal_range()), ich suche allerdings nach Werten. Ich hatte die Idee, den Iterator vor dem Test auf Gleichheit zu inkrementieren und zu speichern und, falls das Iteratorziel gelöscht wird mit dem gespeicherten Wert weiterzumachen, aber damit hatte ich keinen Erfolg.. ich habe mir damit die halbe map gelöscht (Warum eigentlich? Andere Iteratoren sollten doch gültig bleiben? Implementationsabhängig?).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/973647</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/973647</guid><dc:creator><![CDATA[O_o]]></dc:creator><pubDate>Mon, 23 Jan 2006 09:29:54 GMT</pubDate></item><item><title><![CDATA[Reply to hash_multimap erase, Gültigkeit von Iteratoren on Mon, 23 Jan 2006 10:15:17 GMT]]></title><description><![CDATA[<p>Das kommt ganz auf die Implementation des Containers an, welche Iteratoren wann gültig bleiben (z.B. zerlegt vector::erase() alle Iteratoren hinter der Löschposition).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/973679</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/973679</guid><dc:creator><![CDATA[CStoll (off)]]></dc:creator><pubDate>Mon, 23 Jan 2006 10:15:17 GMT</pubDate></item><item><title><![CDATA[Reply to hash_multimap erase, Gültigkeit von Iteratoren on Mon, 23 Jan 2006 11:51:47 GMT]]></title><description><![CDATA[<p>Hast du es so gemacht:</p>
<pre><code class="language-cpp">container.erase(it);
++it;
</code></pre>
<p>oder so:</p>
<pre><code class="language-cpp">container.erase(it++);
</code></pre>
<p>?</p>
<p>Wie schon meine Vorredner angemerkt haben, kommt es immer auf den Container an, aber zweitere Variante wäre z.B. bei einer map korrekt, erstere natürlich nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/973780</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/973780</guid><dc:creator><![CDATA[Ringding]]></dc:creator><pubDate>Mon, 23 Jan 2006 11:51:47 GMT</pubDate></item></channel></rss>