<?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[Warum brauch std::map nur less?]]></title><description><![CDATA[<p>Wieso braucht die map kein == Operator?</p>
<p>Wenn ich z.B. map.find(suche) mache wird das dann so gemacht?<br />
if( !(suche &lt; element) &amp;&amp; !(element &lt; suche)) -&gt; == -&gt; gefunden</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/193675/warum-brauch-std-map-nur-less</link><generator>RSS for Node</generator><lastBuildDate>Wed, 13 May 2026 22:44:34 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/193675.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 28 Sep 2007 14:13:50 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Warum brauch std::map nur less? on Fri, 28 Sep 2007 14:13:50 GMT]]></title><description><![CDATA[<p>Wieso braucht die map kein == Operator?</p>
<p>Wenn ich z.B. map.find(suche) mache wird das dann so gemacht?<br />
if( !(suche &lt; element) &amp;&amp; !(element &lt; suche)) -&gt; == -&gt; gefunden</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1374427</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1374427</guid><dc:creator><![CDATA[black knight]]></dc:creator><pubDate>Fri, 28 Sep 2007 14:13:50 GMT</pubDate></item><item><title><![CDATA[Reply to Warum brauch std::map nur less? on Fri, 28 Sep 2007 14:36:52 GMT]]></title><description><![CDATA[<p>Ja klar, wenn du eigene Klassen hast, wärs ja schrecklich wenn du nur für den Vergleich alle Vergleichs-Operatoren == &gt; &lt; =&gt; &lt;= != definieren müsstest <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/1374441</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1374441</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Fri, 28 Sep 2007 14:36:52 GMT</pubDate></item><item><title><![CDATA[Reply to Warum brauch std::map nur less? on Fri, 28 Sep 2007 16:49:27 GMT]]></title><description><![CDATA[<p>glaub ehr das std::less &quot;&lt;&quot; dafür da ist um die elemente in std::map stortiert abzulegen.. gleiche elemente darf std::map nicht enthalten..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1374530</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1374530</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Fri, 28 Sep 2007 16:49:27 GMT</pubDate></item><item><title><![CDATA[Reply to Warum brauch std::map nur less? on Fri, 28 Sep 2007 16:58:42 GMT]]></title><description><![CDATA[<p>black knight schrieb:</p>
<blockquote>
<p>Wieso braucht die map kein == Operator?<br />
Wenn ich z.B. map.find(suche) mache wird das dann so gemacht?<br />
if( !(suche &lt; element) &amp;&amp; !(element &lt; suche)) -&gt; == -&gt; gefunden</p>
</blockquote>
<p>Genaugenommen: !map.key_compare()(suche, element) &amp;&amp; !map.key_compare(element, suche). Für den Default-Fall key_compare() == std::less, resultiert das aber ziemlich genau in dem Code, den du angegeben hast.</p>
<p>Eine Map verwendet also nicht Gleichheit (==) sondern &quot;Äquivalenz im Sinne der Sortierreihenfolge&quot; um zu prüfen, ob zwei Element gleich sind. Das gilt übrigens nicht nur für map, sondern für alle sortierten Container (set, multimap, ...) und ale Algorithmen, die auf sortierten Sequenzen arbeiten (std::lower_bound,...).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1374542</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1374542</guid><dc:creator><![CDATA[HumeSikkins]]></dc:creator><pubDate>Fri, 28 Sep 2007 16:58:42 GMT</pubDate></item><item><title><![CDATA[Reply to Warum brauch std::map nur less? on Fri, 28 Sep 2007 18:07:02 GMT]]></title><description><![CDATA[<p>BorisDieKlinge schrieb:</p>
<blockquote>
<p>gleiche elemente darf std::map nicht enthalten..</p>
</blockquote>
<p>Klar, aber bei &quot;find&quot; will ich ja ein gleiches finden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1374581</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1374581</guid><dc:creator><![CDATA[black knight]]></dc:creator><pubDate>Fri, 28 Sep 2007 18:07:02 GMT</pubDate></item><item><title><![CDATA[Reply to Warum brauch std::map nur less? on Fri, 28 Sep 2007 21:04:42 GMT]]></title><description><![CDATA[<p>Die map braucht kein ==, weil &lt; ausreicht, um die Gleichheit abzubilden, wenn es eine gültige Metrik ist. Dann gilt nämlich folgendes:</p>
<pre><code class="language-cpp">T a, b;

assert( ( a == b )   ==   (not (a &lt; b) and not (b &lt; a)) );
</code></pre>
<p>/EDIT: Hmm … 'false and false' … ergibt 'false'. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";-)"
      alt="😉"
    /> Code korrigiert.<br />
/EDIT2: Mist, steht ja bereits korrekt im ersten Posting. <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/1374658</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1374658</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Fri, 28 Sep 2007 21:04:42 GMT</pubDate></item><item><title><![CDATA[Reply to Warum brauch std::map nur less? on Fri, 28 Sep 2007 21:43:13 GMT]]></title><description><![CDATA[<p>um auf gleichheit zu testen, muss der operator nicht überladen werden, es wird standardmäßig immer auf binäre gleichheit geprüft. Den operator == muss man nur dann überladen, wenn das Objekt Speicher auf dem Heap reserviert (mit new).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1374673</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1374673</guid><dc:creator><![CDATA[Krux]]></dc:creator><pubDate>Fri, 28 Sep 2007 21:43:13 GMT</pubDate></item><item><title><![CDATA[Reply to Warum brauch std::map nur less? on Fri, 28 Sep 2007 21:48:33 GMT]]></title><description><![CDATA[<p>Krux schrieb:</p>
<blockquote>
<p>um auf gleichheit zu testen, muss der operator nicht überladen werden, es wird standardmäßig immer auf binäre gleichheit geprüft.</p>
</blockquote>
<p>Was meinst Du mit binäre Gleichheit? Bit-für-Bit-Gleichheit?</p>
<p>Falls Du das meinst: nein, das ist falsch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1374674</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1374674</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Fri, 28 Sep 2007 21:48:33 GMT</pubDate></item><item><title><![CDATA[Reply to Warum brauch std::map nur less? on Sat, 29 Sep 2007 09:12:24 GMT]]></title><description><![CDATA[<p>Um nochmal auf die Frage zu antworten: Map braucht nur less, weil die Datenstruktur als Binärbaum implementiert ist. Um ein Element zu finden, wird folgender Pseudocode verwendet:</p>
<pre><code class="language-cpp">node find_node(node n, value v) {
    if (n == null_ptr) return null_ptr;
    if (v &lt; n-&gt;value) return find_node(n-&gt;left_child, v);
    if (n-&gt;value &lt; v) return find_node(n-&gt;right_child, v);
    return n;
}

// Der Aufruf lautet dann natürlich:
find_node(tree-&gt;root, v);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1374733</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1374733</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Sat, 29 Sep 2007 09:12:24 GMT</pubDate></item><item><title><![CDATA[Reply to Warum brauch std::map nur less? on Sat, 29 Sep 2007 09:47:01 GMT]]></title><description><![CDATA[<p>Wenn du dich dafür interressiert, wie man mit op&lt; die ganzen anderen Vergleichsoperatoren abbildet, dann schau dir mal die Implementierung von <a href="http://boost.org/libs/utility/operators.htm#arithmetic" rel="nofollow">Boost.Operators</a> an.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1374746</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1374746</guid><dc:creator><![CDATA[lolz]]></dc:creator><pubDate>Sat, 29 Sep 2007 09:47:01 GMT</pubDate></item><item><title><![CDATA[Reply to Warum brauch std::map nur less? on Sat, 29 Sep 2007 10:26:03 GMT]]></title><description><![CDATA[<p>Nochmal ein Stichwort zur Ausgangsfrage:</p>
<p><a href="http://de.wikipedia.org/wiki/Strenge_schwache_Ordnung" rel="nofollow">http://de.wikipedia.org/wiki/Strenge_schwache_Ordnung</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1374757</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1374757</guid><dc:creator><![CDATA[finix]]></dc:creator><pubDate>Sat, 29 Sep 2007 10:26:03 GMT</pubDate></item><item><title><![CDATA[Reply to Warum brauch std::map nur less? on Sat, 29 Sep 2007 19:29:28 GMT]]></title><description><![CDATA[<p>Was die STL angeht ist wohl eher der Link angebracht: <a href="http://www.sgi.com/tech/stl/StrictWeakOrdering.html" rel="nofollow">http://www.sgi.com/tech/stl/StrictWeakOrdering.html</a><br />
EDIT: Er. Ok, nicht &quot;eher&quot; sondern zusätzlich - der erklärt nicht *warum* ein &quot;less&quot; pedicate ausreichend ist bzw. was &quot;strict weak ordering&quot; bedeutet <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="🙂"
    /> /EDIT</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1375032</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1375032</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sat, 29 Sep 2007 19:29:28 GMT</pubDate></item><item><title><![CDATA[Reply to Warum brauch std::map nur less? on Sat, 29 Sep 2007 22:00:47 GMT]]></title><description><![CDATA[<p>Konrad Rudolph schrieb:</p>
<blockquote>
<p>Krux schrieb:</p>
<blockquote>
<p>um auf gleichheit zu testen, muss der operator nicht überladen werden, es wird standardmäßig immer auf binäre gleichheit geprüft.</p>
</blockquote>
<p>Was meinst Du mit binäre Gleichheit? Bit-für-Bit-Gleichheit?</p>
<p>Falls Du das meinst: nein, das ist falsch.</p>
</blockquote>
<p>sorry, mein fehler, hab da was mit dem standardkopierkonstruktor verwechselt gehabt. Der == operator ist standardmäßig nicht verfügbar.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1375104</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1375104</guid><dc:creator><![CDATA[Krux]]></dc:creator><pubDate>Sat, 29 Sep 2007 22:00:47 GMT</pubDate></item></channel></rss>