<?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[set + compare]]></title><description><![CDATA[<p>Hi,<br />
std::set nimmt als zweiten template-parameter einen Comparator, ueblicherweise mit einer &quot;kleiner&quot;-Semantik. Wie ist das aber mit Vergleichen auf Gleichheit? Meiner Meinung nach muss man in einem set in diversen Situationen auf Gleichheit pruefen, wird da einfach der default-operator == genommen oder gibt es einen &quot;Trick&quot;, um nur mit Hilfe von &quot;&lt;&quot; auf Gleichheit schliessen zu koennen (die Negation liefert ja &quot;groesser-gleich&quot;, wenn man da jetzt nicht auch ein &quot;groesser&quot; hat kommt man nicht auf Gleichheit oder, selbst wenn man das naechste Element in der Ordnung noch mit einbezieht schaffe ich es gerade nicht wirklich)?<br />
Wenn ersteres der Fall ist, finde ich das etwas seltsam, warum sich der eine Vergleicher konfigurieren laesst, der andere aber nicht. Klar, bitweises Vergleichen geht immer und der operator == wird auch ggf. vom Compiler generiert, wohingegen '&lt;' intuitiv nicht immer eine Semantik hat. Aber ist das der einzige Grund?</p>
<p>lessorequal</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/280874/set-compare</link><generator>RSS for Node</generator><lastBuildDate>Sun, 23 Aug 2026 23:13:23 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/280874.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 23 Jan 2011 12:26:09 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to set + compare on Sun, 23 Jan 2011 12:26:09 GMT]]></title><description><![CDATA[<p>Hi,<br />
std::set nimmt als zweiten template-parameter einen Comparator, ueblicherweise mit einer &quot;kleiner&quot;-Semantik. Wie ist das aber mit Vergleichen auf Gleichheit? Meiner Meinung nach muss man in einem set in diversen Situationen auf Gleichheit pruefen, wird da einfach der default-operator == genommen oder gibt es einen &quot;Trick&quot;, um nur mit Hilfe von &quot;&lt;&quot; auf Gleichheit schliessen zu koennen (die Negation liefert ja &quot;groesser-gleich&quot;, wenn man da jetzt nicht auch ein &quot;groesser&quot; hat kommt man nicht auf Gleichheit oder, selbst wenn man das naechste Element in der Ordnung noch mit einbezieht schaffe ich es gerade nicht wirklich)?<br />
Wenn ersteres der Fall ist, finde ich das etwas seltsam, warum sich der eine Vergleicher konfigurieren laesst, der andere aber nicht. Klar, bitweises Vergleichen geht immer und der operator == wird auch ggf. vom Compiler generiert, wohingegen '&lt;' intuitiv nicht immer eine Semantik hat. Aber ist das der einzige Grund?</p>
<p>lessorequal</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2010548</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2010548</guid><dc:creator><![CDATA[lessorequal]]></dc:creator><pubDate>Sun, 23 Jan 2011 12:26:09 GMT</pubDate></item><item><title><![CDATA[Reply to set + compare on Sun, 23 Jan 2011 12:35:49 GMT]]></title><description><![CDATA[<p>Übergib als Parameter doch einfach std::equal_to&lt;T&gt;?!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2010553</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2010553</guid><dc:creator><![CDATA[equal_to]]></dc:creator><pubDate>Sun, 23 Jan 2011 12:35:49 GMT</pubDate></item><item><title><![CDATA[Reply to set + compare on Sun, 23 Jan 2011 12:38:41 GMT]]></title><description><![CDATA[<p>Wenn A weder größer noch kleiner ist als B, werden A und B wohl gleich sein.</p>
<p>edit: Und der Vergleichsoperator wird übrigens nie automatisch generiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2010555</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2010555</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sun, 23 Jan 2011 12:38:41 GMT</pubDate></item><item><title><![CDATA[Reply to set + compare on Sun, 23 Jan 2011 12:42:30 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Wenn A weder größer noch kleiner ist als B, werden A und B wohl gleich sein.</p>
</blockquote>
<p>*ouch* wohl wahr. Zu frueh am Morgen... Danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2010558</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2010558</guid><dc:creator><![CDATA[lessorequal]]></dc:creator><pubDate>Sun, 23 Jan 2011 12:42:30 GMT</pubDate></item><item><title><![CDATA[Reply to set + compare on Mon, 24 Jan 2011 07:19:08 GMT]]></title><description><![CDATA[<p>Eher wenn A nicht kleiner als B ist und B auch nicht kleiner als A ist.</p>
<pre><code>bool AgleichB = !(A &lt; B) &amp;&amp; !(B &lt; A)
</code></pre>
<p>Die assoziativen STL Container vergleichen auf Äquivalenz.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2010956</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2010956</guid><dc:creator><![CDATA[brotbernd]]></dc:creator><pubDate>Mon, 24 Jan 2011 07:19:08 GMT</pubDate></item><item><title><![CDATA[Reply to set + compare on Mon, 24 Jan 2011 14:23:33 GMT]]></title><description><![CDATA[<p>Und wie wird das bei std::string gemacht? Dort gibt es doch gar keinen operator&lt; und es funktioniert trotzdem?! Und auch wenn es einen geben würde, wie will man vergleichen ob &quot;hallo&quot; kleiner als &quot;pferd&quot; ist?</p>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2011159</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2011159</guid><dc:creator><![CDATA[theliquidwave]]></dc:creator><pubDate>Mon, 24 Jan 2011 14:23:33 GMT</pubDate></item><item><title><![CDATA[Reply to set + compare on Mon, 24 Jan 2011 14:25:54 GMT]]></title><description><![CDATA[<p><a href="http://www.cplusplus.com/reference/string/operators/" rel="nofollow">http://www.cplusplus.com/reference/string/operators/</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2011166</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2011166</guid><dc:creator><![CDATA[Comparison]]></dc:creator><pubDate>Mon, 24 Jan 2011 14:25:54 GMT</pubDate></item><item><title><![CDATA[Reply to set + compare on Mon, 24 Jan 2011 14:27:29 GMT]]></title><description><![CDATA[<blockquote>
<p>Und auch wenn es einen geben würde, wie will man vergleichen ob &quot;hallo&quot; kleiner als &quot;pferd&quot; ist?</p>
</blockquote>
<p>Schonmal überlegt wie die das im Wörterbuch machen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2011170</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2011170</guid><dc:creator><![CDATA[Comparison]]></dc:creator><pubDate>Mon, 24 Jan 2011 14:27:29 GMT</pubDate></item><item><title><![CDATA[Reply to set + compare on Mon, 24 Jan 2011 16:14:28 GMT]]></title><description><![CDATA[<p>Wie sortierst du denn Sonder- und Interpunktionszeichen? Kommt das @ bei dir nach dem a? Es wird hier zwar wohl die ASCII-Rangfolge verwendet, dennoch..</p>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2011275</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2011275</guid><dc:creator><![CDATA[theliquidwave]]></dc:creator><pubDate>Mon, 24 Jan 2011 16:14:28 GMT</pubDate></item><item><title><![CDATA[Reply to set + compare on Mon, 24 Jan 2011 16:26:20 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Wenn A weder größer noch kleiner ist als B, werden A und B wohl gleich sein.</p>
</blockquote>
<p>Nur wenn es eine strikte Ordnung ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2011293</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2011293</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Mon, 24 Jan 2011 16:26:20 GMT</pubDate></item><item><title><![CDATA[Reply to set + compare on Mon, 24 Jan 2011 16:40:53 GMT]]></title><description><![CDATA[<p>knivil schrieb:</p>
<blockquote>
<p>SeppJ schrieb:</p>
<blockquote>
<p>Wenn A weder größer noch kleiner ist als B, werden A und B wohl gleich sein.</p>
</blockquote>
<p>Nur wenn es eine strikte Ordnung ist.</p>
</blockquote>
<p>Ja, das wollte ich noch dabei schreiben, weil dies Voraussetzung für die Benutzung der STL-Algorithmen ist (Standard 23.5) und Leute die das nicht wissen eher verwirrt.</p>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/26a0.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--warning"
      title=":warning:"
      alt="⚠"
    /> Also ganz wichtig für Benutzung der STL: Bei Vergleichsfunktionen immer welche mit strenger schwacher Ordnung wählen. Wer nicht weiß was das ist, sollte mal ein bisschen Googeln was das bedeutet. (Englisch: strict weak ordering)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2011309</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2011309</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 24 Jan 2011 16:40:53 GMT</pubDate></item></channel></rss>