<?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::map Vergleichsoperator]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe eine Map angelegt wo der Compiler nun meckert er können den Vergleichsoperator zum sortieren nicht auf den ersten Typ anwenden weil er ihm unbekannt ist.</p>
<pre><code>map&lt;Triangulation,pair&lt;QString,QString&gt;&gt;
</code></pre>
<p>Triangulation ist ein Objekt einer lib die ich benutze.</p>
<p>Wie kann ich nun entweder den Vergleichsoperator anpassen oder ihn deaktivieren um dieses Problem zu lösen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/224796/std-map-vergleichsoperator</link><generator>RSS for Node</generator><lastBuildDate>Fri, 02 Oct 2026 04:20:23 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/224796.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 15 Oct 2008 10:20:17 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to std::map Vergleichsoperator on Wed, 15 Oct 2008 10:20:17 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe eine Map angelegt wo der Compiler nun meckert er können den Vergleichsoperator zum sortieren nicht auf den ersten Typ anwenden weil er ihm unbekannt ist.</p>
<pre><code>map&lt;Triangulation,pair&lt;QString,QString&gt;&gt;
</code></pre>
<p>Triangulation ist ein Objekt einer lib die ich benutze.</p>
<p>Wie kann ich nun entweder den Vergleichsoperator anpassen oder ihn deaktivieren um dieses Problem zu lösen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1599231</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1599231</guid><dc:creator><![CDATA[rafilis1982]]></dc:creator><pubDate>Wed, 15 Oct 2008 10:20:17 GMT</pubDate></item><item><title><![CDATA[Reply to std::map Vergleichsoperator on Wed, 15 Oct 2008 10:27:28 GMT]]></title><description><![CDATA[<p>Triangulation hat offensichtlich keinen brauchbaren <code>operator==</code> .<br />
Du kannst ihn global überladen, vorausgesetzt, Du kommst an brauchbare Kriterien für einen sinnvollen Vergleich von zwei Triangulation-Instanzen heran.</p>
<pre><code class="language-cpp">bool operator==(const Triangulation&amp; l, const Triangulation&amp; r)
{
    return l.value == r.value;
}
</code></pre>
<p><code>value</code> sei hier stellvertretend für das gewünschte Vergleichskriterium.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1599240</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1599240</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Wed, 15 Oct 2008 10:27:28 GMT</pubDate></item><item><title><![CDATA[Reply to std::map Vergleichsoperator on Wed, 15 Oct 2008 11:17:36 GMT]]></title><description><![CDATA[<p>Vielen Dank für deine Antwort.</p>
<p>Ich könnte ja z.B. die anzahl der Punkte als Vergleichsobjekt nehmen. Hauptsache der fehler wäre erst mal behoben.</p>
<p>Auf die Sortierung kommt es mir ja nicht an.</p>
<p>Aber wie füge ich dann diese Neudefinition eines Vergleichsoperators der map hinzu?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1599270</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1599270</guid><dc:creator><![CDATA[rafilis1982]]></dc:creator><pubDate>Wed, 15 Oct 2008 11:17:36 GMT</pubDate></item><item><title><![CDATA[Reply to std::map Vergleichsoperator on Wed, 15 Oct 2008 11:22:53 GMT]]></title><description><![CDATA[<p>rafilis1982 schrieb:</p>
<blockquote>
<p>Vielen Dank für deine Antwort.</p>
<p>Ich könnte ja z.B. die anzahl der Punkte als Vergleichsobjekt nehmen. Hauptsache der fehler wäre erst mal behoben.</p>
<p>Auf die Sortierung kommt es mir ja nicht an.</p>
<p>Aber wie füge ich dann diese Neudefinition eines Vergleichsoperators der map hinzu?</p>
</blockquote>
<p>So, wie er es gezeigt hat. Da wird der Opertor == für 2 Objekte vom Typ Triangulation verglichen, wass, wenn du einen vergleich machst automatisch benutzt wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1599274</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1599274</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Wed, 15 Oct 2008 11:22:53 GMT</pubDate></item><item><title><![CDATA[Reply to std::map Vergleichsoperator on Wed, 15 Oct 2008 11:23:01 GMT]]></title><description><![CDATA[<p>rafilis1982 schrieb:</p>
<blockquote>
<p>Auf die Sortierung kommt es mir ja nicht an.</p>
</blockquote>
<p>Doch, die Sortierung ist für die Map selbst wichtig. Du brauchst auch soweit ich weiß, keinen operator=, sondern einen operator&lt;. Und der darf auch nicht irgendwas vergleichen, sondern muss eine eindeutige Sortierung ermöglichen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1599275</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1599275</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Wed, 15 Oct 2008 11:23:01 GMT</pubDate></item><item><title><![CDATA[Reply to std::map Vergleichsoperator on Wed, 15 Oct 2008 11:25:07 GMT]]></title><description><![CDATA[<p>rafilis1982 schrieb:</p>
<blockquote>
<p>Vielen Dank für deine Antwort.</p>
<p>Ich könnte ja z.B. die anzahl der Punkte als Vergleichsobjekt nehmen. Hauptsache der fehler wäre erst mal behoben.</p>
<p>Auf die Sortierung kommt es mir ja nicht an.</p>
<p>Aber wie füge ich dann diese Neudefinition eines Vergleichsoperators der map hinzu?</p>
</blockquote>
<p>Brauchst Du nicht. Die map erwartet irgendeinen Vergleichsoperator für die Keys. Wenn der nicht gefunden wird, weil gar keiner definiert wurde, meckert der Compiler.<br />
Wenns ums Sortieren geht, musst Du übrigens den <code>operator&lt;</code> überladen, nicht ==.<br />
Man kann der Map auch noch einen extra Prädikat mitgeben, wenn der standardmäßig defninierte Verlgeichsoperator nicht das vergleicht, was man möchte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1599277</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1599277</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Wed, 15 Oct 2008 11:25:07 GMT</pubDate></item><item><title><![CDATA[Reply to std::map Vergleichsoperator on Wed, 15 Oct 2008 11:44:07 GMT]]></title><description><![CDATA[<p>operator&lt; für eine Map muss allerdings <strong>unbedingt</strong> die Kriterien für <a href="http://en.wikipedia.org/wiki/Strict_weak_ordering" rel="nofollow">Strict Weak Ordering</a> (oder <a href="http://de.wikipedia.org/wiki/Strenge_schwache_Ordnung" rel="nofollow">hier</a> auf Deutsch) erfüllen. Sonst kann die Map nicht richtig funktionieren.</p>
<p>Gleichheit definiert sich in einer Map übrigens über !(a&lt;b) &amp;&amp; !(b&lt;a).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1599292</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1599292</guid><dc:creator><![CDATA[7H3 N4C3R]]></dc:creator><pubDate>Wed, 15 Oct 2008 11:44:07 GMT</pubDate></item><item><title><![CDATA[Reply to std::map Vergleichsoperator on Wed, 15 Oct 2008 12:11:34 GMT]]></title><description><![CDATA[<p>Soweit ist alles klar und funktioniert nun auch.</p>
<p>Eine Frage hätte ich noch.</p>
<p>Ich hab ein ähnliches Problem mit einem Objekt vom Typ Segment_3.</p>
<p>Also wollte ich das analog zum ersten Problem lösen:</p>
<pre><code>bool operator&lt;(const Segment_3&amp; l, const Segment_3&amp; r)
{
	return l.vertex(0).x() &lt; r.vertex(0).x();
}
</code></pre>
<p>Wenn ich das tue meckert er aber trotzdem weiter.</p>
<p>Warum?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1599309</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1599309</guid><dc:creator><![CDATA[rafilis1982]]></dc:creator><pubDate>Wed, 15 Oct 2008 12:11:34 GMT</pubDate></item><item><title><![CDATA[Reply to std::map Vergleichsoperator on Wed, 15 Oct 2008 12:13:34 GMT]]></title><description><![CDATA[<p>Es wäre hilfreich, wenn du uns sagst, was exakt, vollständig, im Wortlaut gemeckert wird. <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/1599312</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1599312</guid><dc:creator><![CDATA[7H3 N4C3R]]></dc:creator><pubDate>Wed, 15 Oct 2008 12:13:34 GMT</pubDate></item><item><title><![CDATA[Reply to std::map Vergleichsoperator on Wed, 15 Oct 2008 12:13:40 GMT]]></title><description><![CDATA[<p>rafilis1982 schrieb:</p>
<blockquote>
<p>Soweit ist alles klar und funktioniert nun auch.</p>
<p>Eine Frage hätte ich noch.</p>
<p>Ich hab ein ähnliches Problem mit einem Objekt vom Typ Segment_3.</p>
<p>Also wollte ich das analog zum ersten Problem lösen:</p>
<pre><code>bool operator&lt;(const Segment_3&amp; l, const Segment_3&amp; r)
{
	return l.vertex(0).x() &lt; r.vertex(0).x();
}
</code></pre>
<p>Wenn ich das tue meckert er aber trotzdem weiter.</p>
<p>Warum?</p>
</blockquote>
<p><strong>Was</strong> meckert er denn an? Die konkreten Fehlermeldungen helfen immer...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1599313</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1599313</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Wed, 15 Oct 2008 12:13:40 GMT</pubDate></item><item><title><![CDATA[Reply to std::map Vergleichsoperator on Wed, 15 Oct 2008 12:24:25 GMT]]></title><description><![CDATA[<p>Entschuldigt, es handelt sich um denselben Fehler wie am Anfang:</p>
<pre><code>error C2678: Binärer Operator '&lt;': Es konnte kein Operator gefunden werden, der einen linksseitigen Operanden vom Typ 'const Segment_3' akzeptiert (oder keine geeignete Konvertierung möglich)
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1599327</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1599327</guid><dc:creator><![CDATA[rafilis1982]]></dc:creator><pubDate>Wed, 15 Oct 2008 12:24:25 GMT</pubDate></item><item><title><![CDATA[Reply to std::map Vergleichsoperator on Wed, 15 Oct 2008 12:37:49 GMT]]></title><description><![CDATA[<p>Wurde der <code>operator&lt;</code> denn vor dem Benutzen der Map deklariert? Befindet sich die Klasse <code>Segment_3</code> eventuell in einem Namensraum?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1599334</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1599334</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 15 Oct 2008 12:37:49 GMT</pubDate></item><item><title><![CDATA[Reply to std::map Vergleichsoperator on Wed, 15 Oct 2008 12:46:29 GMT]]></title><description><![CDATA[<p>Ich habe beide Operatoren global untereinander deklariert:</p>
<pre><code>bool operator&lt;(const Triangulation&amp; l, const Triangulation&amp; r)
{
	return l.number_of_vertices() &lt; r.number_of_vertices();
} 

bool operator&lt;(const Segment_3&amp; l, const Segment_3&amp; r)
{
	return l.vertex(0).x() &lt; r.vertex(0).x();
}
</code></pre>
<p>Bezüglich Namensraum, das stimmt, aber das ist auch bei Triangulation nicht anders und funktioniert trotzdem.</p>
<pre><code>typedef CGAL::Simple_cartesian&lt;double&gt; SK;
typedef CGAL::Filtered_kernel&lt;SK&gt; FK;
struct K : public FK {};
typedef K::Point_3 Point_3;
typedef K::Segment_3 Segment_3;
typedef CGAL::Delaunay_triangulation_3&lt;K&gt; Triangulation;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1599346</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1599346</guid><dc:creator><![CDATA[rafilis1982]]></dc:creator><pubDate>Wed, 15 Oct 2008 12:46:29 GMT</pubDate></item><item><title><![CDATA[Reply to std::map Vergleichsoperator on Wed, 15 Oct 2008 13:58:19 GMT]]></title><description><![CDATA[<p>Keiner eine Idee? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1599406</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1599406</guid><dc:creator><![CDATA[rafilis1982]]></dc:creator><pubDate>Wed, 15 Oct 2008 13:58:19 GMT</pubDate></item><item><title><![CDATA[Reply to std::map Vergleichsoperator on Wed, 15 Oct 2008 14:03:18 GMT]]></title><description><![CDATA[<p>rafilis1982 schrieb:</p>
<blockquote>
<p>Keiner eine Idee? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
</blockquote>
<p>Ist der Operator zum Zeitpunkt der Template-Ausprägung auch wirklich bekannt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1599412</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1599412</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Wed, 15 Oct 2008 14:03:18 GMT</pubDate></item><item><title><![CDATA[Reply to std::map Vergleichsoperator on Wed, 15 Oct 2008 14:14:05 GMT]]></title><description><![CDATA[<p>Ich habe den Operator in der Klasse deklariert die ich includiere.</p>
<p>Erst dann defniere ich die map. Hab auch schon versucht die Deklaration in der entsprechenden Datei vorzunehmen, wo ich auch die Map definiere, leider ohne Erfolg.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1599423</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1599423</guid><dc:creator><![CDATA[rafilis1982]]></dc:creator><pubDate>Wed, 15 Oct 2008 14:14:05 GMT</pubDate></item><item><title><![CDATA[Reply to std::map Vergleichsoperator on Wed, 15 Oct 2008 14:15:18 GMT]]></title><description><![CDATA[<p>Poste vielleicht mal ein Stück Code, du kannst ja das Irrelevante weglassen. Vielleicht hast du irgendwo was übersehen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1599425</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1599425</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 15 Oct 2008 14:15:18 GMT</pubDate></item><item><title><![CDATA[Reply to std::map Vergleichsoperator on Wed, 15 Oct 2008 14:22:05 GMT]]></title><description><![CDATA[<p>Building.h:</p>
<pre><code>#include &lt;QTreeWidget&gt;
#include &lt;map&gt;
#include &lt;algorithm&gt;
#include &lt;iostream&gt;
using namespace std;

// -------------------- CGAL
//#include &lt;CGAL/Exact_predicates_inexact_constructions_kernel.h&gt;
#include &lt;CGAL/Simple_cartesian.h&gt;
#include &lt;CGAL/Filtered_kernel.h&gt;
#include &lt;CGAL/Delaunay_triangulation_3.h&gt;

typedef CGAL::Simple_cartesian&lt;double&gt; SK;
typedef CGAL::Filtered_kernel&lt;SK&gt; FK;
struct K : public FK {};
typedef K::Point_3 Point_3;
typedef K::Segment_3 Segment_3;
typedef CGAL::Delaunay_triangulation_3&lt;K&gt; Triangulation;

bool operator&lt;(const Segment_3&amp; l, const Segment_3&amp; r)
{
	return l.vertex(0) &lt; r.vertex(0);
}
bool operator&lt;(const Triangulation&amp; l, const Triangulation&amp; r)
{
	return l.number_of_vertices() &lt; r.number_of_vertices();
} 

class Building
{...
}
</code></pre>
<p>geomview.cpp</p>
<pre><code>#include &quot;geomview_mesh.h&quot;
using namespace citygml;

typedef pair&lt;Segment_3,Edge*&gt; mapEdgePair;

int GeomviewMesh::read(vector&lt;Building*&gt; *f)
{
map&lt;Segment_3,Edge*&gt; mapEdge;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1599434</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1599434</guid><dc:creator><![CDATA[rafilis1982]]></dc:creator><pubDate>Wed, 15 Oct 2008 14:22:05 GMT</pubDate></item><item><title><![CDATA[Reply to std::map Vergleichsoperator on Wed, 15 Oct 2008 14:29:38 GMT]]></title><description><![CDATA[<p>a) sollte man niemals using-Deklarativen im Header benutzen. Das verseucht den globalen Namespace und führt das ganze Namespace-System an sich ad absurdum.<br />
b) vermisse ich ein <code>#include &quot;Building.h&quot;</code> in geomview.cpp.<br />
c) solltest Du Dir mal allgemein Gedanken darüber machen, was man den Header (Schnittstelle) packen sollte, und was besser nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1599437</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1599437</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Wed, 15 Oct 2008 14:29:38 GMT</pubDate></item><item><title><![CDATA[Reply to std::map Vergleichsoperator on Wed, 15 Oct 2008 14:32:20 GMT]]></title><description><![CDATA[<p>zu a) und c)<br />
Niemand ist perfekt <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="😉"
    /></p>
<p>zu b)<br />
Das entsprechende include befindet sich in geomview.h</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1599445</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1599445</guid><dc:creator><![CDATA[rafilis1982]]></dc:creator><pubDate>Wed, 15 Oct 2008 14:32:20 GMT</pubDate></item><item><title><![CDATA[Reply to std::map Vergleichsoperator on Wed, 15 Oct 2008 14:35:50 GMT]]></title><description><![CDATA[<p>rafilis1982 schrieb:</p>
<blockquote>
<p>zu a) und c)<br />
Niemand ist perfekt <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="😉"
    /></p>
</blockquote>
<p>Trotzdem solltest du Tachyons Tipps zur Kenntnis nehmen.</p>
<p>Erstell bitte einmal eine Funktion, die ein <code>Segment_3</code> als Parameter nimmt, deklariere sie am gleichen Ort wie der Operator und rufe sie dort auf, wo der Operator benutzt wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1599450</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1599450</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 15 Oct 2008 14:35:50 GMT</pubDate></item></channel></rss>