<?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[[STL Map] Sortierung]]></title><description><![CDATA[<p>Hi,</p>
<p>ich verwende mehrere Maps. Irgendwo meckert die STL library dass sie keinen Vergleichsoperator less findet der zwei Klassentypen von mir nimmt.</p>
<p>Ich vermute das kommt daher, dass bei einer Map der key kein Standardobjekt ist, sondern eine Klasse von mir. Sehe ich das richtig?</p>
<p>Leider meckert der Compiler nur an der Lib, nicht an meinem Code, daher weiss ich nciht welche Map Probleme macht. Ich vermute sowas:</p>
<p>typedef std::map&lt;MeineKlasse, MeineKlasse&gt; M;</p>
<p>Jetzt die Frage was ich tun kann:</p>
<p>1. Eigene Sortierung der map angeben? Wie geht das, ich finde kaum Dokumente<br />
2. Kann ich in MeineKlasse den &lt; Operator definieren? Kommt die Lib damit klar?</p>
<p>Danke<br />
DKT</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/171856/stl-map-sortierung</link><generator>RSS for Node</generator><lastBuildDate>Thu, 17 Sep 2026 14:10:36 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/171856.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 30 Jan 2007 07:40:45 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [STL Map] Sortierung on Tue, 30 Jan 2007 07:40:45 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich verwende mehrere Maps. Irgendwo meckert die STL library dass sie keinen Vergleichsoperator less findet der zwei Klassentypen von mir nimmt.</p>
<p>Ich vermute das kommt daher, dass bei einer Map der key kein Standardobjekt ist, sondern eine Klasse von mir. Sehe ich das richtig?</p>
<p>Leider meckert der Compiler nur an der Lib, nicht an meinem Code, daher weiss ich nciht welche Map Probleme macht. Ich vermute sowas:</p>
<p>typedef std::map&lt;MeineKlasse, MeineKlasse&gt; M;</p>
<p>Jetzt die Frage was ich tun kann:</p>
<p>1. Eigene Sortierung der map angeben? Wie geht das, ich finde kaum Dokumente<br />
2. Kann ich in MeineKlasse den &lt; Operator definieren? Kommt die Lib damit klar?</p>
<p>Danke<br />
DKT</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1219548</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1219548</guid><dc:creator><![CDATA[Kreatief]]></dc:creator><pubDate>Tue, 30 Jan 2007 07:40:45 GMT</pubDate></item><item><title><![CDATA[Reply to [STL Map] Sortierung on Tue, 30 Jan 2007 07:49:28 GMT]]></title><description><![CDATA[<p>Eine map benötigt irgendeine Möglichkeit, zwei Elemente zu vergleichen - auf diesem Vergleich basiert die gesamte Struktur der map (typisch ist ein balancierter binärer Suchbaum). Wenn deine Klasse keinen Vergleichs-Operator hat, bekommst du deshalb Probleme.</p>
<p>(und da ist es klar, daß die Probleme irgendwo im Inneren des STL-Codes gemeldet werden - dort, wo der operator&lt; vermisst wird)</p>
<p>Zur Lösung hast du zwei Alternativen:</p>
<ol>
<li>du spendierst der Klasse einen op&lt;:</li>
</ol>
<pre><code class="language-cpp">class MeineKlasse
{
  int number;
public:
  ...
  bool operator&lt;(const MeineKlasse&amp; other) const
  {
    //vergleiche *this und other miteinander
    return number&lt;other.number;
  }
};
//Anmerkung: op&lt; kann auch als globale Funktion angelegt werden

map&lt;MeineKlasse,MeineKlasse&gt; M;
</code></pre>
<ol>
<li>du definierst einen Funktor, der die Objekte vergleicht:</li>
</ol>
<pre><code class="language-cpp">class MeineKlasse
{
  int number;
public:
  int get_val() { return number; } // oder friend-Zugriff für compare
};

struct compare : public binary_function&lt;MeineKlasse,MeineKlasse,bool&gt;
{
  bool operator()(const MeineKlasse&amp;l,const MeineKlasse&amp;r) const
  { return l.get_val()&lt;r.get_val(); }
};

map&lt;MeineKlasse,MeineKlasse,compare/*Vergleichsfunktion*/&gt; M;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1219550</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1219550</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 30 Jan 2007 07:49:28 GMT</pubDate></item><item><title><![CDATA[Reply to [STL Map] Sortierung on Tue, 30 Jan 2007 07:54:03 GMT]]></title><description><![CDATA[<p>Wow, danke CStoll für die gute schnelle Antwort.<br />
Damit sind meine Vermutungen bestätigt.</p>
<p>Danke<br />
DKT</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1219551</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1219551</guid><dc:creator><![CDATA[Kreatief]]></dc:creator><pubDate>Tue, 30 Jan 2007 07:54:03 GMT</pubDate></item><item><title><![CDATA[Reply to [STL Map] Sortierung on Tue, 30 Jan 2007 07:55:22 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<pre><code class="language-cpp">struct compare : public binary_function&lt;MeineKlasse,MeineKlasse,bool&gt;
{
  bool operator()(const MeineKlasse&amp;l,const MeineKlasse&amp;r) const
  { return l.get_val()&lt;r.get_val(); }
};
</code></pre>
</blockquote>
<p>Was ich mich dabei schon mehrfach gefragt habe: Hat es irgendeinen Vorteil, von binary_function zu erben? Ohne geht doch auch, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1219552</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1219552</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Tue, 30 Jan 2007 07:55:22 GMT</pubDate></item><item><title><![CDATA[Reply to [STL Map] Sortierung on Tue, 30 Jan 2007 08:02:57 GMT]]></title><description><![CDATA[<p>...man hat die typedefs first_argument_type, second_argument_type und result_type geerbt, die ein Template potentiell benutzen könnte. Erbst Du nicht von binary_function, bekommst Du in so einem Fall (wenngleich mir der noch nicht untergekommen ist) halt nen Error, und musst die typedefs selbst anbringen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1219556</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1219556</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Tue, 30 Jan 2007 08:02:57 GMT</pubDate></item><item><title><![CDATA[Reply to [STL Map] Sortierung on Tue, 30 Jan 2007 08:37:36 GMT]]></title><description><![CDATA[<p>LordJaxom schrieb:</p>
<blockquote>
<p>Erbst Du nicht von binary_function, bekommst Du in so einem Fall (wenngleich mir der noch nicht untergekommen ist) halt nen Error, und musst die typedefs selbst anbringen.</p>
</blockquote>
<p>Alleinstehend wirst du damit keine Probleme bekommen - interessant wird es erst, wenn du den Funktor in einem Kontext benötigst, wo diese typedefs verwendet werden (z.B. mit std::bind2nd() oder std::not2() - die werten die Argument- und Ergebnistypen ihres Arguments aus, um ihre eigenen Typen festzulegen.</p>
<p>(und ehe ich später diese typedefs einfügen muß, habe ich mir angewöhnt, Funktoren gleich von unary_function bzw. binary_function abzuleiten)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1219578</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1219578</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 30 Jan 2007 08:37:36 GMT</pubDate></item><item><title><![CDATA[Reply to [STL Map] Sortierung on Tue, 30 Jan 2007 09:16:56 GMT]]></title><description><![CDATA[<p>Danke für die Info. Da ich &lt;functional&gt; bisher kaum benutzt habe, ist mir das noch nicht untergekommen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1219612</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1219612</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Tue, 30 Jan 2007 09:16:56 GMT</pubDate></item></channel></rss>