<?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[std::multimap]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich benutze erst seit kurzem die STL und bin mir manchmal noch bißchen unsicher. Damit mir nicht in 2 Wochen irgendwelche Access Violetions um die Ohren fliegen, wollte ich gleich jetzt mal Fragen ob mein Code korrekt ist.</p>
<p>Ich habe 2 Strukturen zur Speicherung von RenderTargets:<br />
renderTargets ist ein map&lt;string, RenderTarget*&gt; und<br />
renderTargetsPriority ist multimap&lt;uint, RenderTarget*&gt;<br />
Beide maps haben immer gleich viele Elemente. Ein RenderTarget ist quasi immer in beiden Strukturen vorhanden. Per renderTargets kann man ein RenderTarget durch seinen Namen holen und mit renderTargetsPriority durch seine Priorität.</p>
<p>Mein Code um ein RenderTarget per Name zu löschen (aus beiden Maps) sieht jetzt so aus:</p>
<pre><code class="language-cpp">void Renderer::destroyRenderTarget(const std::string&amp; name) {

   RenderTargetMap::iterator it = renderTargets.find(name);

   if(it != renderTargets.end()) {	 
      //--- Erase entry in multimap&lt;int, RenderTarget*&gt; ---
     RenderTargetPriorityMap::iterator mmIt;
     std::pair&lt;RenderTargetPriorityMap::iterator,    RenderTargetPriorityMap::iterator&gt; mmRangeIt;

      // Get all entries which have the priority of the RT to be deleted (there can be multiple 
      // RTs with the same priority).
      mmRangeIt = renderTargetsPriority.equal_range(it-&gt;second-&gt;getPriority());
      for (mmIt = mmRangeIt.first; mmIt != mmRangeIt.second;) {
         if(mmIt-&gt;second == it-&gt;second) 
             mmIt = renderTargetsPriority.erase(mmIt);	
         else
            ++mmIt;
      }

      delete it-&gt;second;			// Delete RT

      renderTargets.erase(it);	// Erase entry in map&lt;string, RenderTarget*&gt;		
   }
}
</code></pre>
<p>Ist meine Funktion korrekt? Oder mache ich was falsch (Iteratorbenutzung etc.)?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/246914/std-multimap</link><generator>RSS for Node</generator><lastBuildDate>Thu, 17 Sep 2026 19:22:05 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/246914.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 03 Aug 2009 14:02:13 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to std::multimap on Mon, 03 Aug 2009 14:02:13 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich benutze erst seit kurzem die STL und bin mir manchmal noch bißchen unsicher. Damit mir nicht in 2 Wochen irgendwelche Access Violetions um die Ohren fliegen, wollte ich gleich jetzt mal Fragen ob mein Code korrekt ist.</p>
<p>Ich habe 2 Strukturen zur Speicherung von RenderTargets:<br />
renderTargets ist ein map&lt;string, RenderTarget*&gt; und<br />
renderTargetsPriority ist multimap&lt;uint, RenderTarget*&gt;<br />
Beide maps haben immer gleich viele Elemente. Ein RenderTarget ist quasi immer in beiden Strukturen vorhanden. Per renderTargets kann man ein RenderTarget durch seinen Namen holen und mit renderTargetsPriority durch seine Priorität.</p>
<p>Mein Code um ein RenderTarget per Name zu löschen (aus beiden Maps) sieht jetzt so aus:</p>
<pre><code class="language-cpp">void Renderer::destroyRenderTarget(const std::string&amp; name) {

   RenderTargetMap::iterator it = renderTargets.find(name);

   if(it != renderTargets.end()) {	 
      //--- Erase entry in multimap&lt;int, RenderTarget*&gt; ---
     RenderTargetPriorityMap::iterator mmIt;
     std::pair&lt;RenderTargetPriorityMap::iterator,    RenderTargetPriorityMap::iterator&gt; mmRangeIt;

      // Get all entries which have the priority of the RT to be deleted (there can be multiple 
      // RTs with the same priority).
      mmRangeIt = renderTargetsPriority.equal_range(it-&gt;second-&gt;getPriority());
      for (mmIt = mmRangeIt.first; mmIt != mmRangeIt.second;) {
         if(mmIt-&gt;second == it-&gt;second) 
             mmIt = renderTargetsPriority.erase(mmIt);	
         else
            ++mmIt;
      }

      delete it-&gt;second;			// Delete RT

      renderTargets.erase(it);	// Erase entry in map&lt;string, RenderTarget*&gt;		
   }
}
</code></pre>
<p>Ist meine Funktion korrekt? Oder mache ich was falsch (Iteratorbenutzung etc.)?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1754578</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1754578</guid><dc:creator><![CDATA[rolleis]]></dc:creator><pubDate>Mon, 03 Aug 2009 14:02:13 GMT</pubDate></item><item><title><![CDATA[Reply to std::multimap on Tue, 04 Aug 2009 18:40:14 GMT]]></title><description><![CDATA[<p>Kann denn niemand mit STL Erfahrung mal kurz den Code überfliegen? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1755288</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1755288</guid><dc:creator><![CDATA[rolleis]]></dc:creator><pubDate>Tue, 04 Aug 2009 18:40:14 GMT</pubDate></item><item><title><![CDATA[Reply to std::multimap on Tue, 04 Aug 2009 18:58:40 GMT]]></title><description><![CDATA[<p>ich habs mal so geschrieben, weil ich finde, es ist so lesbarer...<br />
Fehler sind mir keine aufgefallen - abgesehen davon, dass ich finde, dass die Funktion zu lang ist und die Variablennamen grausig sind - da sollte man sich evtl bessere Namen einfallen lassen...</p>
<pre><code class="language-cpp">void Renderer::destroyRenderTarget(const std::string&amp; name)
{
	typedef RenderTargetPriorityMap::iterator Titerator;
	typedef std::pair &lt;Titerator, Titerator&gt; Titerator_pair;

	Titerator it = renderTargets.find(name); 
	if(it == renderTargets.end())
		return;

	Titerator_pair range = renderTargetsPriority.equal_range(it-&gt;second-&gt;getPriority());

	for (Titerator iter = range.first; iter != range.second; )
	{
		if(iter-&gt;second == it-&gt;second) 
			iter = renderTargetsPriority.erase(iter);    
		else 
			++iter; 
	} 

	delete it-&gt;second;
	renderTargets.erase(it);
}
</code></pre>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1755304</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1755304</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Tue, 04 Aug 2009 18:58:40 GMT</pubDate></item><item><title><![CDATA[Reply to std::multimap on Tue, 04 Aug 2009 19:58:17 GMT]]></title><description><![CDATA[<p>unskilled schrieb:</p>
<blockquote>
<p>abgesehen davon, dass ich finde, dass die Funktion zu lang ist und die Variablennamen grausig sind</p>
</blockquote>
<p>lol? DIESE Funktion ist zu lang?? wtf? Manchmal glaub ich echt, manche Leute leben in einer &quot;Hello World&quot; idealisierten Traumwelt...<br />
Was an Namen wie renderTargets oder renderTargetsPriority &quot;grausig&quot; sein soll, weißt wohl nur du.<br />
Ansonsten danke;)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1755342</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1755342</guid><dc:creator><![CDATA[rolleis]]></dc:creator><pubDate>Tue, 04 Aug 2009 19:58:17 GMT</pubDate></item><item><title><![CDATA[Reply to std::multimap on Tue, 04 Aug 2009 20:16:20 GMT]]></title><description><![CDATA[<p>ich rede von Namen wie mmRangeIt...</p>
<p>Nur weil du <a href="http://www.cplusplus.com/reference/algorithm/remove_if/" rel="nofollow">http://www.cplusplus.com/reference/algorithm/remove_if/</a> nicht kennst, ist deine Fkt um 6 Zeilen länger, als sie das sein müsste...<br />
Und zu dem noch sehr viel schwerer zu verstehen...</p>
<p>Und ja, in meiner Hallo-Welt-Traumwelt sind Fkt nicht so lang und Variablennamen haben keine sinnlosen Prefixe... Wenn du so etwas allerdings nicht hören möchtest, hättest du auch nicht fragen müssen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /></p>
<p>so in etwa würd es bei mir aussehen:</p>
<pre><code class="language-cpp">struct comparer
{
private:
	const RenderTarget* lhs;
public:
	comparer(const RenderTarget *_lhs) : lhs(_lhs) {}

	bool operator() (const RenderTarget *rhs) const
	{	return *lhs == *rhs; }
};

void Renderer::_destroyRenderTarget(const RenderTargetPriorityMap::iterator it)
{
    typedef RenderTargetPriorityMap::iterator Titerator;
    typedef std::pair &lt;Titerator, Titerator&gt; Titerator_pair;

    Titerator_pair range = renderTargetsPriority.equal_range(it-&gt;second-&gt;getPriority());

    remove_if( range.first, range.second, comparer(it-&gt;second) );

    delete it-&gt;second;
    renderTargets.erase(it);
}

void Renderer::destroyRenderTarget(const std::string&amp; name)
{
    RenderTargetPriorityMap::iterator it = renderTargets.find(name);
    if(it != renderTargets.end())
        _destroyRenderTarget(it);
}
</code></pre>
<p>Wenn man diese beiden typedefs dann noch sinnvollerweise in den Header auslagert und ihnen bessere Namen verpasst, braucht kein Mensch mehr auch nur annähernd so viel Zeit, die Fkt zu verstehen, wie das bisher der Fall war...</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1755355</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1755355</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Tue, 04 Aug 2009 20:16:20 GMT</pubDate></item><item><title><![CDATA[Reply to std::multimap on Tue, 04 Aug 2009 20:50:46 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/1958">@Code</a>: LOL. Na der Code ist natürlich jetzt kürzer und einfacher zu verstehen. Und der Methodenname mit dem Underscore ist natürlich richtig schön. Und einen comparer für einen einzigen Aufruf definieren ist auch sehr elegant. Und der Name Titerator_pair ist ebenfalls viel besser. *facepalm</p>
<p>Jetzt weiß ich immerhin, wieso du so heißt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1755380</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1755380</guid><dc:creator><![CDATA[rolleis]]></dc:creator><pubDate>Tue, 04 Aug 2009 20:50:46 GMT</pubDate></item><item><title><![CDATA[Reply to std::multimap on Tue, 04 Aug 2009 20:55:20 GMT]]></title><description><![CDATA[<p>rolleis schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/1958">@Code</a>: LOL. Na der Code ist natürlich jetzt kürzer und einfacher zu verstehen. Und der Methodenname mit dem Underscore ist natürlich richtig schön. Und einen comparer für einen einzigen Aufruf definieren ist auch sehr elegant. Und der Name Titerator_pair ist ebenfalls viel besser. *facepalm</p>
<p>Jetzt weiß ich immerhin, wieso du so heißt.</p>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1755383</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1755383</guid><dc:creator><![CDATA[LP @ Ferropolis]]></dc:creator><pubDate>Tue, 04 Aug 2009 20:55:20 GMT</pubDate></item><item><title><![CDATA[Reply to std::multimap on Tue, 04 Aug 2009 20:56:02 GMT]]></title><description><![CDATA[<pre><code>unskilled  adj.	 	unerfahren
unskilled  adj.	 	ungelernt
unskilled  adj.	 	ungeschickt
unskilled  adj.	 	nicht ausgebildet
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1755384</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1755384</guid><dc:creator><![CDATA[facepalm0r]]></dc:creator><pubDate>Tue, 04 Aug 2009 20:56:02 GMT</pubDate></item><item><title><![CDATA[Reply to std::multimap on Tue, 04 Aug 2009 21:12:33 GMT]]></title><description><![CDATA[<p>rolleis schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/1958">@Code</a>: LOL. Na der Code ist natürlich jetzt kürzer</p>
</blockquote>
<p>darum gehts doch gar nicht - es geht darum, wie gut man die fkt. xyz verstehen kann...</p>
<p>rolleis schrieb:</p>
<blockquote>
<p>und einfacher zu verstehen.</p>
</blockquote>
<p>auf jeden fall besser zu überblicken und es sollte eigtl für jeden einfacher zu lesen sein ( <code>remove_if</code> vs. 6 Zeilen <code>for</code> -Schleife...) - man muss noch nicht mal wissen, wie remove_if arbeitet sondern erkennt sofort am Namen, was es macht - aber naja... Du kannst ja mal deinen Quelltext aus dem ersten Post und meinen gerade eben vergleichen und dann sagen, welchen du besser findest, wenn du jetzt gucken möchtest, was die fkt xyz genau macht...</p>
<p>rolleis schrieb:</p>
<blockquote>
<p>Und der Methodenname mit dem Underscore ist natürlich richtig schön.</p>
</blockquote>
<p>Kannst es auch in eine Fkt hauen, mag ich allerdings nicht so - und meine privaten Fkt haben eigtl alle nen Underscore am Anfang, damit Intellisense nicht ständig private Fkt vorschlägt - ist halt Geschmackssache... Allerdings bin ich der Meinung, dass jede Fkt eine Aufgabe haben sollte: Eine überprüft, ob das Element existiert und die andere sorgt dann für das löschen der Elemente...</p>
<p>rolleis schrieb:</p>
<blockquote>
<p>Und einen comparer für einen einzigen Aufruf definieren ist auch sehr elegant.</p>
</blockquote>
<p>Japp, ist es... Oder siehst du irgendwelche Nachteile?</p>
<p>rolleis schrieb:</p>
<blockquote>
<p>Und der Name Titerator_pair ist ebenfalls viel besser. *facepalm</p>
</blockquote>
<p>myself schrieb:</p>
<blockquote>
<p>Wenn man diese beiden typedefs dann noch sinnvollerweise in den Header auslagert <strong>und ihnen bessere Namen verpasst</strong></p>
</blockquote>
<p>rolleis schrieb:</p>
<blockquote>
<p>Jetzt weiß ich immerhin, wieso du so heißt.</p>
</blockquote>
<p>myself schrieb:</p>
<blockquote>
<p>Wenn du so etwas allerdings nicht hören möchtest, hättest du auch nicht fragen müssen</p>
</blockquote>
<p>und wenns dir nicht passt, dann ignorier es halt und mach es weiterhin so, wie du es jetzt machst...<br />
naja - viel erfolg noch beim Hilfe suchen, wenn du denkst, es so und so besser zu wissen...</p>
<p>edit: da oben is übrigens ein unnötiges const dabei...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1755389</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1755389</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Tue, 04 Aug 2009 21:12:33 GMT</pubDate></item><item><title><![CDATA[Reply to std::multimap on Wed, 05 Aug 2009 02:45:56 GMT]]></title><description><![CDATA[<p>unskilled schrieb:</p>
<blockquote>
<p>auf jeden fall besser zu überblicken</p>
</blockquote>
<p>Ich finde genau das Gegenteil ist der Fall. Für so eine trivale Sache extra eine 2. Funktion anlegen und eine Klasse ist... &quot;Overkill&quot; und ein klarer Fall von Overdesigned. Ich finde deinen Code viel umständlicher. Um zu verstehen was da passiert muss ich die eine Funktion anschauen, dann die andere Funktion, dann die Comparer Klasse anschauen und dann auch noch raffen wie remove_if funktioniert. Sonst rafft man nämlich NICHT, was die Anweisung macht.</p>
<p>unskilled schrieb:</p>
<blockquote>
<p>Kannst es auch in eine Fkt hauen, mag ich allerdings nicht so - und meine privaten Fkt haben eigtl alle nen Underscore am Anfang, damit Intellisense nicht ständig private Fkt vorschlägt - ist halt Geschmackssache...</p>
</blockquote>
<p>In so ziemlich jeden Buch zu C++ das ich gelesen habe stand, dass man beginnende Underscores vermeiden sollte.</p>
<p>unskilled schrieb:</p>
<blockquote>
<p>Japp, ist es... Oder siehst du irgendwelche Nachteile?</p>
</blockquote>
<p>Japp. Overkill. Extra ne Klasse definieren um sie an einer einzigen Stelle zu verwenden ist einfach Quatsch.</p>
<p>unskilled schrieb:</p>
<blockquote>
<p>Wenn man diese beiden typedefs dann noch sinnvollerweise in den Header auslagert <strong>und ihnen bessere Namen verpasst</strong></p>
</blockquote>
<p>Einen typdef für einen Typen, den ich genau an EINER Stelle in einer Funktion verwende... schon wieder Overkill. Ich glaub du bist so ein Sprachliebhaber, der sich stundenlang an irgendwelchen Konstrukten aufgeilt, aber noch nie eine wirklich größere Software programmiert hat.</p>
<p>unskilled schrieb:</p>
<blockquote>
<p>naja - viel erfolg noch beim Hilfe suchen, wenn du denkst, es so und so besser zu wissen...</p>
</blockquote>
<p>Der Punkt ist ganz einfach: Es kotzt mich in diesem Forum generell manchmal an, dass jeder immer gleich daher kommt und meint das Design des OP bemängeln zu müssen. Ich habe klipp und klar nur gefragt ob die Logik stimmt und wollte eben KEINE Designvorschläge. Aber du musst natürlich gleich wieder daherkommt und rumnörgeln. Und eine Funktion von 20 Zeilen als zu lang bezeichnen ist wirklich lächerlich. Wie gesagt, ungefragt immer gleich den Stil des anderen kritisieren wirkt einfach klugscheisserisch und damit <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_down"
      title=":-1:"
      alt="👎"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1755453</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1755453</guid><dc:creator><![CDATA[rolleis]]></dc:creator><pubDate>Wed, 05 Aug 2009 02:45:56 GMT</pubDate></item><item><title><![CDATA[Reply to std::multimap on Wed, 05 Aug 2009 03:03:49 GMT]]></title><description><![CDATA[<p>wenn für dich alles nen overkill ist, was du nur einmal brauchst, dann ists ja gut...<br />
mir ist es ziemlich egal, obs am ende 20 LOC mehr sind oder nicht, wenn ich dafür ne Fkt einfach überblicken kann...<br />
Aber mit deiner unendlichen STL-Erfahrung wirst du das schon besser wissen als ich, wann man fertige Funktionen nimmt und wann nicht - wenn dich die Klasse stört, könntest du auch ne Fkt nehmen - je nach Compiler auch ne lamba-Fkt, aber das wär wahrscheinlich auch wieder overkill - weil du overkill ja offenbar mit &quot;kenn ich nicht&quot; gleichzusetzen scheinst...</p>
<p>nur dazu noch was:<br />
&quot;In so ziemlich jeden Buch zu C++ das ich gelesen habe stand, dass man beginnende Underscores vermeiden sollte.&quot;</p>
<p>Ja, den sollte man vermeiden, wenn man vor hat, nen Großbuchstaben danach zu schreiben oder noch nen Underscore - ansonsten ist es garantiert, dass dort keine Makros drauf liegen sondern maximal fkt- oder variablennamen - die aber einfach überdeckt werden und es somit nicht stört... Ist auch im Standard nachzulesen, falls du mir wieder nicht glaubst... Aber das wäre auch overkill, für so ne Frage iwo nachzuschlagen...</p>
<p>naja, hf noch - wird mir hier zu dumm - zu mal ich auch noch unmissverständlich kenntlich gemacht habe, was meine meinung ist und was nicht...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1755454</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1755454</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Wed, 05 Aug 2009 03:03:49 GMT</pubDate></item><item><title><![CDATA[Reply to std::multimap on Wed, 05 Aug 2009 07:54:22 GMT]]></title><description><![CDATA[<p>unskilled schrieb:</p>
<blockquote>
<p>rolleis schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/1958">@Code</a>: LOL. Na der Code ist natürlich jetzt kürzer</p>
</blockquote>
<p>darum gehts doch gar nicht - es geht darum, wie gut man die fkt. xyz verstehen kann...</p>
</blockquote>
<p>das Problem ist, dass dein &quot;comparer&quot; nichts aussagt. Ich weis immer noch nicht, wann Elemente gelöscht werden sollen, ohne dass ich comparer kenne. Der Name ist einfach Schrott.<br />
Viel wichtiger ist allerdings, das remove_if bei maps überhaupt nicht funktioniert, weil der key der pairs konstant ist.</p>
<p>Oder wie es der gcc sagt:</p>
<pre><code>-------------- Build: Debug in test ---------------

Compiling: main.cpp
In file included from /usr/include/c++/4.4/bits/stl_algobase.h:66,
                 from /usr/include/c++/4.4/bits/char_traits.h:41,
                 from /usr/include/c++/4.4/ios:41,
                 from /usr/include/c++/4.4/ostream:40,
                 from /usr/include/c++/4.4/iostream:40,
                 from /home/otze/Projekte/test/main.cpp:1:
/usr/include/c++/4.4/bits/stl_pair.h: In member function ‘std::pair&lt;const int, int&gt;&amp; std::pair&lt;const int, int&gt;::operator=(const std::pair&lt;const int, int&gt;&amp;)’:
/usr/include/c++/4.4/bits/stl_pair.h:68:   instantiated from ‘_FIter std::remove_if(_FIter, _FIter, _Predicate) [with _FIter = std::_Rb_tree_iterator&lt;std::pair&lt;const int, int&gt; &gt;, _Predicate = bool (*)(std::pair&lt;const int, int&gt;)]’
/home/otze/Projekte/test/main.cpp:25:   instantiated from here
/usr/include/c++/4.4/bits/stl_pair.h:68: error: non-static const member ‘const int std::pair&lt;const int, int&gt;::first’, can't use default assignment operator
In file included from /usr/include/c++/4.4/algorithm:62,
                 from /home/otze/Projekte/test/main.cpp:4:
/usr/include/c++/4.4/bits/stl_algo.h: In function ‘_FIter std::remove_if(_FIter, _FIter, _Predicate) [with _FIter = std::_Rb_tree_iterator&lt;std::pair&lt;const int, int&gt; &gt;, _Predicate = bool (*)(std::pair&lt;const int, int&gt;)]’:
/usr/include/c++/4.4/bits/stl_algo.h:1161: note: synthesized method ‘std::pair&lt;const int, int&gt;&amp; std::pair&lt;const int, int&gt;::operator=(const std::pair&lt;const int, int&gt;&amp;)’ first required here 
Process terminated with status 1 (0 minutes, 0 seconds)
1 errors, 0 warnings
</code></pre>
<p>Auch ist die Aufteilung der Funktion nicht sinnvoll, solange wir den Rest des Interfaces nicht kennen. Wenn das Ding überhaupt kein Iteratorinterface hat, ist die Aufteilung höchstens verwirrend, zumal sie keine Vereinfachung darstellt sondern nur Code rum schiebt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1755514</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1755514</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Wed, 05 Aug 2009 07:54:22 GMT</pubDate></item><item><title><![CDATA[Reply to std::multimap on Wed, 05 Aug 2009 08:25:03 GMT]]></title><description><![CDATA[<p>Falls man überhaupt über Vereinfachung nachdenkt, sollten auch bekannte Nebenbedingungen mit einbezogen werden. Wir setzen ja voraus, dass jedes RT jeweils genau einmal in jeder map auftaucht, dann kann diese Eigenschaft auch beim Suchen genutzt werden - sind diese Voraussetzungen verletzt, liegt sowieso ein Fehler vor.</p>
<pre><code class="language-cpp">void Renderer::destroyRenderTarget(const std::string&amp; name) {

   RenderTargetMap::iterator it = renderTargets.find(name);

   if(it == renderTargets.end())
       return;

   RenderTarget* rt = it-&gt;second;

   //--- Erase entry in multimap&lt;int, RenderTarget*&gt; ---
   // Get all entries which have the priority of the RT to be deleted (there can be multiple
   // RTs with the same priority), but each RT is unique
   RenderTargetPriorityMap::iterator mmIt = renderTargetsPriority.lower_bound(it-&gt;second-&gt;getPriority());
   for ( ; mmIt-&gt;second != rt; ++mmIt )
       ;
   renderTargetsPriority.erase(mmIt);

   renderTargets.erase( it );    // Erase entry in map&lt;string, RenderTarget*&gt;

   delete rt;
}
</code></pre>
<p>Solange Zeiger darauf existieren, sollten Speicherbereiche nicht gelöscht werden - derartige deletes gehört immer ans Ende der Funktion. In diesem konkreten Fall ist das zwar wahrscheinlich unproblematisch, im Allgemeinen ist das aber nicht immer leicht zu überschauen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1755523</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1755523</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 05 Aug 2009 08:25:03 GMT</pubDate></item><item><title><![CDATA[Reply to std::multimap on Wed, 05 Aug 2009 08:46:09 GMT]]></title><description><![CDATA[<p>otze schrieb:</p>
<blockquote>
<p>Viel wichtiger ist allerdings, das remove_if bei maps überhaupt nicht funktioniert, weil der key der pairs konstant ist.</p>
</blockquote>
<p>Darüberhinaus ist remove_if falsch angewandt worden (soviel zum Thema &quot;man muss nicht wissen, was die Funktion tut&quot; :D)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1755533</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1755533</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Wed, 05 Aug 2009 08:46:09 GMT</pubDate></item><item><title><![CDATA[Reply to std::multimap on Wed, 05 Aug 2009 10:07:54 GMT]]></title><description><![CDATA[<p>Unskilled schrieb:</p>
<blockquote>
<p>Und das ganze auch noch direkt hintereinander... Ab jetzt werde ich meine Membervariablen auch immer <strong>so verunstalten</strong> *scnr*<br />
Naja - mal im Ernst: Ich finds hässlich und alles andere als nützlich - aber jedem das Seine...</p>
</blockquote>
<p>*SCNR* <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Und jetzt plötzlich:</p>
<p>Unskilled schrieb:</p>
<blockquote>
<p>Kannst es auch in eine Fkt hauen, mag ich allerdings nicht so - und meine privaten Fkt haben eigtl alle nen Underscore am Anfang, damit Intellisense nicht ständig private Fkt vorschlägt</p>
</blockquote>
<p>Und ich dachte du meinst das ironisch, dass du das ab dort auch so machst.. :p<br />
(ich weiss, dass es da um m_ ging, aber in etwa läuft es auf das selbe hinaus.. ;))</p>
<p>Quelle:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-p-is-1619162.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-p-is-1619162.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1755597</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1755597</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Wed, 05 Aug 2009 10:07:54 GMT</pubDate></item><item><title><![CDATA[Reply to std::multimap on Wed, 05 Aug 2009 12:40:14 GMT]]></title><description><![CDATA[<p>Hehe, welch Ironie. Da kritisiert er meinen Code, schreibt groß um, verkompliziert den Code total und dann ist der Code auch noch falsch. Wirklich ne riesen Verbesserung. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /> :p<br />
Glaub das mach ich jetzt auch, für jede Aktion mindestens 2 Funktionen und mindestens eine Hilfsklasse. Vor allem hilfreich, wenn man nach LOC bezahlt wird. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /><br />
&lt;/sarkasmus&gt;</p>
<p>Naja, nix für ungut. Ich bleib jetzt bei meiner EINEN Funktion. <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/1755737</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1755737</guid><dc:creator><![CDATA[rolleis]]></dc:creator><pubDate>Wed, 05 Aug 2009 12:40:14 GMT</pubDate></item><item><title><![CDATA[Reply to std::multimap on Wed, 05 Aug 2009 12:45:35 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/6642">@camper</a>: Deine Lösung finde ich klasse. Schön eine (!) kurze Funktion, noch kürzer als mein Code. Danke <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1755741</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1755741</guid><dc:creator><![CDATA[rolleis]]></dc:creator><pubDate>Wed, 05 Aug 2009 12:45:35 GMT</pubDate></item></channel></rss>