<?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[[ERLEDIGT] Mehrere Elemente aus einer Map löschen.]]></title><description><![CDATA[<p>Hallo Leute, ich habe eine Map die Pair Elemente speichert.<br />
Das zweite ist eine Klasse die eine startknot_id und eine endknot_id speichert.</p>
<p>Jetzt möchte ich eine Funktion implementieren die unter angabe einer bestimmten id alle Elemente löscht die diese ID im startknot oder endknot haben.</p>
<pre><code class="language-cpp">typedef std::map&lt;unsigned int,Edge, std::less&lt;unsigned int&gt;&gt;::iterator EDGE_ITERATOR;

EDGE_ITERATOR edgeit;
for(edgeit=edges.begin();edgeit!=edges.end();edgeit++){
	if((edgeit-&gt;second.get_startknot_id()==useless_id) || (edgeit-&gt;second.get_endknot_id()==useless_id)){
			edges.erase(edgeit);
	}
}
</code></pre>
<p>Die get_... Funktionen liefern die richtigen Ergebnisse. Leider hängt sich diese Schleife schon im ersten Durchgang in Zeile 6 auf. Warum ist es so?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/267608/erledigt-mehrere-elemente-aus-einer-map-löschen</link><generator>RSS for Node</generator><lastBuildDate>Wed, 02 Sep 2026 09:36:49 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/267608.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 27 May 2010 09:30:48 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [ERLEDIGT] Mehrere Elemente aus einer Map löschen. on Thu, 27 May 2010 10:28:37 GMT]]></title><description><![CDATA[<p>Hallo Leute, ich habe eine Map die Pair Elemente speichert.<br />
Das zweite ist eine Klasse die eine startknot_id und eine endknot_id speichert.</p>
<p>Jetzt möchte ich eine Funktion implementieren die unter angabe einer bestimmten id alle Elemente löscht die diese ID im startknot oder endknot haben.</p>
<pre><code class="language-cpp">typedef std::map&lt;unsigned int,Edge, std::less&lt;unsigned int&gt;&gt;::iterator EDGE_ITERATOR;

EDGE_ITERATOR edgeit;
for(edgeit=edges.begin();edgeit!=edges.end();edgeit++){
	if((edgeit-&gt;second.get_startknot_id()==useless_id) || (edgeit-&gt;second.get_endknot_id()==useless_id)){
			edges.erase(edgeit);
	}
}
</code></pre>
<p>Die get_... Funktionen liefern die richtigen Ergebnisse. Leider hängt sich diese Schleife schon im ersten Durchgang in Zeile 6 auf. Warum ist es so?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1903091</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1903091</guid><dc:creator><![CDATA[darkfate]]></dc:creator><pubDate>Thu, 27 May 2010 10:28:37 GMT</pubDate></item><item><title><![CDATA[Reply to [ERLEDIGT] Mehrere Elemente aus einer Map löschen. on Thu, 27 May 2010 09:53:16 GMT]]></title><description><![CDATA[<p>Weil der Iterator ungültig ist nach dem erase.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1903103</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1903103</guid><dc:creator><![CDATA[Fellhuhn]]></dc:creator><pubDate>Thu, 27 May 2010 09:53:16 GMT</pubDate></item><item><title><![CDATA[Reply to [ERLEDIGT] Mehrere Elemente aus einer Map löschen. on Thu, 27 May 2010 09:55:13 GMT]]></title><description><![CDATA[<p>darkfate schrieb:</p>
<blockquote>
<p>Die get_... Funktionen liefern die richtigen Ergebnisse. Leider hängt sich diese Schleife schon im ersten Durchgang in Zeile 6 auf. Warum ist es so?</p>
</blockquote>
<p>Weil edgeit ungültig wird, wenn du das Element, auf das er zeigt, aus der Map entfernst. Da du aber im Schleifenkopf darauf immer edgeit++ aufrufst geht das dann schief.</p>
<p>Schau dir am Besten mal std::remove_if an <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1903106</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1903106</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Thu, 27 May 2010 09:55:13 GMT</pubDate></item><item><title><![CDATA[Reply to [ERLEDIGT] Mehrere Elemente aus einer Map löschen. on Thu, 27 May 2010 09:55:55 GMT]]></title><description><![CDATA[<p>Fellhuhn schrieb:</p>
<blockquote>
<p>Weil der Iterator ungültig ist nach dem erase.</p>
</blockquote>
<p>Sowas ähnliches habe ich mir auch schon gedacht. Wie könnte man es lösen?<br />
Ich habe es mit einer do while Schleife angefangen.. ist aber noch nicht fertig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1903107</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1903107</guid><dc:creator><![CDATA[darkfate]]></dc:creator><pubDate>Thu, 27 May 2010 09:55:55 GMT</pubDate></item><item><title><![CDATA[Reply to [ERLEDIGT] Mehrere Elemente aus einer Map löschen. on Thu, 27 May 2010 10:05:18 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>darkfate schrieb:</p>
<blockquote>
<p>Die get_... Funktionen liefern die richtigen Ergebnisse. Leider hängt sich diese Schleife schon im ersten Durchgang in Zeile 6 auf. Warum ist es so?</p>
</blockquote>
<p>Weil edgeit ungültig wird, wenn du das Element, auf das er zeigt, aus der Map entfernst. Da du aber im Schleifenkopf darauf immer edgeit++ aufrufst geht das dann schief.</p>
<p>Schau dir am Besten mal std::remove_if an <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
</blockquote>
<p>Danke für den Tipp. Irgendwie kriege ich es nicht hin diese Funktion auf meine map anzuwenden. HAbe jetzt <strong>edgeit = edges.begin();</strong> hinzugefügt:</p>
<pre><code class="language-cpp">EDGE_ITERATOR edgeit;
for(edgeit=edges.begin();edgeit!=edges.end();edgeit++){
	if((edgeit-&gt;second.get_startknot_id()==useless_id) || (edgeit-&gt;second.get_endknot_id()==useless_id)){
			edges.erase(edgeit);
			edgeit = edges.begin();
	}
}
</code></pre>
<p>Es klappt nun einwandfrei. Wenn du Zeit hättest, könntest du mir bitte Zeigen wie ich die remove_if Funktion auf diese Situation anwende? Bereits implementierte Sachen habe ich lieber als eigenen code zu produzieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1903111</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1903111</guid><dc:creator><![CDATA[darkfate]]></dc:creator><pubDate>Thu, 27 May 2010 10:05:18 GMT</pubDate></item><item><title><![CDATA[Reply to [ERLEDIGT] Mehrere Elemente aus einer Map löschen. on Thu, 27 May 2010 10:12:14 GMT]]></title><description><![CDATA[<p>Kannst folgendes machen:</p>
<pre><code class="language-cpp">for (std::map&lt;int, std::string&gt;::iterator i = m_map.begin(), e = m_map.end(); i != e; )
{
    if (condition)
        m_map.erase(i++);
    else
        ++i;
}
</code></pre>
<p>Wichtig ist das i++ bei erase, da so i nach dem erase wieder valide ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1903116</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1903116</guid><dc:creator><![CDATA[Fellhuhn]]></dc:creator><pubDate>Thu, 27 May 2010 10:12:14 GMT</pubDate></item><item><title><![CDATA[Reply to [ERLEDIGT] Mehrere Elemente aus einer Map löschen. on Thu, 27 May 2010 10:16:42 GMT]]></title><description><![CDATA[<p>Fellhuhn schrieb:</p>
<blockquote>
<p>....</p>
</blockquote>
<p>Danke, habe ich übernommen. code ist noch kürzer. Interessant wäre dennoch die remove_if Funktion weil ich an mehreren Stellen solche Schleifen verwende.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1903121</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1903121</guid><dc:creator><![CDATA[darkfate]]></dc:creator><pubDate>Thu, 27 May 2010 10:16:42 GMT</pubDate></item><item><title><![CDATA[Reply to [ERLEDIGT] Mehrere Elemente aus einer Map löschen. on Thu, 27 May 2010 10:23:53 GMT]]></title><description><![CDATA[<p>Ich glaube remove_if funktioniert nicht mit std::map, bin mir aber nicht sicher.</p>
<p>Ansosten wäre es einfach:</p>
<pre><code class="language-cpp">std::remove_if(map.begin(), map.end(), einFunktorEtc);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1903129</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1903129</guid><dc:creator><![CDATA[Fellhuhn]]></dc:creator><pubDate>Thu, 27 May 2010 10:23:53 GMT</pubDate></item><item><title><![CDATA[Reply to [ERLEDIGT] Mehrere Elemente aus einer Map löschen. on Thu, 27 May 2010 10:28:19 GMT]]></title><description><![CDATA[<p>Fellhuhn schrieb:</p>
<blockquote>
<p>Ich glaube remove_if funktioniert nicht mit std::map, bin mir aber nicht sicher.</p>
<p>Ansosten wäre es einfach:</p>
<pre><code class="language-cpp">std::remove_if(map.begin(), map.end(), einFunktorEtc);
</code></pre>
</blockquote>
<p>Klappt leider nicht bei map. Steht zumindest so in den meisten Foreneinträgen. Da es funktioniert, bin ich auch so glücklich, danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1903133</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1903133</guid><dc:creator><![CDATA[darkfate]]></dc:creator><pubDate>Thu, 27 May 2010 10:28:19 GMT</pubDate></item><item><title><![CDATA[Reply to [ERLEDIGT] Mehrere Elemente aus einer Map löschen. on Thu, 27 May 2010 10:48:47 GMT]]></title><description><![CDATA[<p>darkfate schrieb:</p>
<blockquote>
<p>Klappt leider nicht bei map. Steht zumindest so in den meisten Foreneinträgen.</p>
</blockquote>
<p>Stimmt, tut mir leid. remove_if ist auf sequenz-Container beschränkt und funktioniert nicht mit assoziativen Containern. Asche auf mein Haupt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1903144</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1903144</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Thu, 27 May 2010 10:48:47 GMT</pubDate></item><item><title><![CDATA[Reply to [ERLEDIGT] Mehrere Elemente aus einer Map löschen. on Thu, 27 May 2010 11:24:53 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>darkfate schrieb:</p>
<blockquote>
<p>Klappt leider nicht bei map. Steht zumindest so in den meisten Foreneinträgen.</p>
</blockquote>
<p>Stimmt, tut mir leid. remove_if ist auf sequenz-Container beschränkt und funktioniert nicht mit assoziativen Containern. Asche auf mein Haupt.</p>
</blockquote>
<p>Für Hilfe braucht man sich zu entschuldigen. Dank dir kenne ich eine Abkürzung falls ich mal mit vector etc arbeite <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1903160</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1903160</guid><dc:creator><![CDATA[darkfate]]></dc:creator><pubDate>Thu, 27 May 2010 11:24:53 GMT</pubDate></item></channel></rss>