<?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[sort mit Klassen]]></title><description><![CDATA[<p>Wie kann ich bewirken, dass sort beim sortieren eines vectors von Objekten meiner Klasse A den operator&lt;/&gt; meiner Klasse benutzt? Und ergibt der Aufruf keinen Fehler, wenn ich keinen definiere? Wie wird dann sortiert?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/120356/sort-mit-klassen</link><generator>RSS for Node</generator><lastBuildDate>Sat, 22 Aug 2026 07:42:50 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/120356.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 12 Sep 2005 13:35:55 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to sort mit Klassen on Mon, 12 Sep 2005 13:35:55 GMT]]></title><description><![CDATA[<p>Wie kann ich bewirken, dass sort beim sortieren eines vectors von Objekten meiner Klasse A den operator&lt;/&gt; meiner Klasse benutzt? Und ergibt der Aufruf keinen Fehler, wenn ich keinen definiere? Wie wird dann sortiert?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/870277</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/870277</guid><dc:creator><![CDATA[__gast]]></dc:creator><pubDate>Mon, 12 Sep 2005 13:35:55 GMT</pubDate></item><item><title><![CDATA[Reply to sort mit Klassen on Mon, 12 Sep 2005 13:47:46 GMT]]></title><description><![CDATA[<p>Es wird automatisch kleiner verwendet. Wenn nicht vorhanden, gibt es einen entsprechenden Fehler.</p>
<p>Wenn Du Deinen Vektor mit vector&lt;A*&gt; anlegst, ist ein kleiner automatisch für den Pointer definiert und er sortiert danach. Ansonsten gibt es einen Compile-Fehler.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/870289</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/870289</guid><dc:creator><![CDATA[niemand]]></dc:creator><pubDate>Mon, 12 Sep 2005 13:47:46 GMT</pubDate></item><item><title><![CDATA[Reply to sort mit Klassen on Mon, 12 Sep 2005 13:49:38 GMT]]></title><description><![CDATA[<p>__gast schrieb:</p>
<blockquote>
<p>Wie kann ich bewirken, dass sort beim sortieren eines vectors von Objekten meiner Klasse A den operator&lt;/&gt; meiner Klasse benutzt?</p>
</blockquote>
<p>den operator überladen<br />
bsp: <a href="http://tutorial.schornboeck.net/operatoren_ueberladung.htm" rel="nofollow">http://tutorial.schornboeck.net/operatoren_ueberladung.htm</a></p>
<p>__gast schrieb:</p>
<blockquote>
<p>Und ergibt der Aufruf keinen Fehler, wenn ich keinen definiere?</p>
</blockquote>
<p>ja</p>
<p>__gast schrieb:</p>
<blockquote>
<p>Wie wird dann sortiert?</p>
</blockquote>
<p><a href="http://www.cppreference.com/cppalgorithm/sort.html" rel="nofollow">http://www.cppreference.com/cppalgorithm/sort.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/870291</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/870291</guid><dc:creator><![CDATA[miller_m]]></dc:creator><pubDate>Mon, 12 Sep 2005 13:49:38 GMT</pubDate></item><item><title><![CDATA[Reply to sort mit Klassen on Mon, 12 Sep 2005 14:30:18 GMT]]></title><description><![CDATA[<p>Vielen Dank für die Antworten.<br />
Ja, ich arbeite mit Pointern. Ich habe</p>
<pre><code class="language-cpp">bool operator&lt;(MyClass&amp; a,MyClass&amp; b)
{
  return true;
}

bool operator&gt;(MyClass&amp; a,MyClass&amp; b)
{
  return true;
}
</code></pre>
<p>implementiert.<br />
Trotzdem gibt es bei Benutzung von sort einen Fehler in _function_base.h</p>
<pre><code class="language-cpp">template &lt;class _Tp&gt;
struct less : public binary_function&lt;_Tp,_Tp,bool&gt; 
{
  bool operator()(const _Tp&amp; __x, const _Tp&amp; __y) const { return __x &lt; __y; }
};
</code></pre>
<pre><code>[C++ Error] _function_base.h(73): E2093 'operator&lt;' not implemented in type 'MyClass' for arguments of the same type
</code></pre>
<p>Wieso das?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/870331</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/870331</guid><dc:creator><![CDATA[__gast]]></dc:creator><pubDate>Mon, 12 Sep 2005 14:30:18 GMT</pubDate></item><item><title><![CDATA[Reply to sort mit Klassen on Mon, 12 Sep 2005 14:44:57 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">class CompAPointer {
public:
  bool operator()(const A* a,const A* b) const
  {
     return true;
  }
}

int main() 
{
  vector&lt;A*&gt; x;

  sort( x.begin(), x.end(), CompAPointer());
}
</code></pre>
<p>Wenn Du vector&lt;A*&gt; benutzt, wird niemals A::operator&lt; aufgerufen, sondern A*::operator &lt;, was nur die Pointer vergleicht.<br />
Deswegen übergibst Du sort dann ein Objekt, welches den Vergleich erledigt (auf Pointer Basis).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/870343</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/870343</guid><dc:creator><![CDATA[niemand]]></dc:creator><pubDate>Mon, 12 Sep 2005 14:44:57 GMT</pubDate></item><item><title><![CDATA[Reply to sort mit Klassen on Mon, 12 Sep 2005 17:28:38 GMT]]></title><description><![CDATA[<p>Muss dass eine Klasse sein?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/870442</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/870442</guid><dc:creator><![CDATA[__gast]]></dc:creator><pubDate>Mon, 12 Sep 2005 17:28:38 GMT</pubDate></item><item><title><![CDATA[Reply to sort mit Klassen on Tue, 13 Sep 2005 09:31:06 GMT]]></title><description><![CDATA[<p>Nein:</p>
<pre><code class="language-cpp">bool CompareAPtr(const A* a,const A* b)
{
   return true;
}

int main()
{
  vector&lt;A*&gt; x;

  sort( x.begin(), x.end(), ptr_fun( CompareAPtr));
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/870882</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/870882</guid><dc:creator><![CDATA[niemand]]></dc:creator><pubDate>Tue, 13 Sep 2005 09:31:06 GMT</pubDate></item><item><title><![CDATA[Reply to sort mit Klassen on Tue, 13 Sep 2005 09:50:28 GMT]]></title><description><![CDATA[<blockquote>
<p>bool operator&lt;(MyClass&amp; a,MyClass&amp; b)<br />
{<br />
return true;<br />
}<br />
// Sollte doch einfach so aussehen<br />
bool operator&lt; (const MyClass&amp; a, const MyClass&amp; b)<br />
{<br />
return true;<br />
}</p>
</blockquote>
<p>Dann sollte das auch ganz ohne Prädikat (diese Vergleichsklasse hier) gehen, gibt ja nicht umsonst vorgefertigte wie std::less</p>
<p>MfG SideWinder</p>
]]></description><link>https://www.c-plusplus.net/forum/post/870914</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/870914</guid><dc:creator><![CDATA[SideWinder]]></dc:creator><pubDate>Tue, 13 Sep 2005 09:50:28 GMT</pubDate></item><item><title><![CDATA[Reply to sort mit Klassen on Tue, 13 Sep 2005 09:56:30 GMT]]></title><description><![CDATA[<p>Wobei man vielleicht noch anmerken sollte, dass die Sortierfunktion &quot;Strict Weak Ordering&quot; erfüllen muss:<br />
<a href="http://www.sgi.com/tech/stl/StrictWeakOrdering.html" rel="nofollow">http://www.sgi.com/tech/stl/StrictWeakOrdering.html</a></p>
<p>Kurzform:</p>
<p>f(x, x) -&gt; false.<br />
f(x, y) -&gt; !f(y, x)<br />
f(x, y) und f(y, z) -&gt; f(x, z)</p>
<p>Insbesondere wichtig, wenn man so ein Prädikat in Maps oder Sets einsetzt. Sonst sind die potenziell intern Schrott.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/870919</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/870919</guid><dc:creator><![CDATA[7H3 N4C3R]]></dc:creator><pubDate>Tue, 13 Sep 2005 09:56:30 GMT</pubDate></item><item><title><![CDATA[Reply to sort mit Klassen on Tue, 13 Sep 2005 10:00:10 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/201">@SideWinder</a><br />
Der OP arbeitet wohl mit einem Vektor von Pointern, deswegen funktionieren seine operator&lt; als Sortierkriterium nicht.<br />
Im Fall von vector&lt;A&gt; benötigt er natürlich keine extra Vergleichsfunktion.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/870928</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/870928</guid><dc:creator><![CDATA[niemand]]></dc:creator><pubDate>Tue, 13 Sep 2005 10:00:10 GMT</pubDate></item><item><title><![CDATA[Reply to sort mit Klassen on Tue, 13 Sep 2005 10:12:15 GMT]]></title><description><![CDATA[<p>Aber selbst für Pointer reicht ein eigener op&lt; für Pointer + std::less?</p>
<p>MfG SideWinder</p>
]]></description><link>https://www.c-plusplus.net/forum/post/870939</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/870939</guid><dc:creator><![CDATA[SideWinder]]></dc:creator><pubDate>Tue, 13 Sep 2005 10:12:15 GMT</pubDate></item><item><title><![CDATA[Reply to sort mit Klassen on Tue, 13 Sep 2005 10:39:00 GMT]]></title><description><![CDATA[<p>Vielen Dank, die Methode von niemand mit der Funktion gefällt mir am besten. Funktioniert einwandfrei...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/870960</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/870960</guid><dc:creator><![CDATA[__gast]]></dc:creator><pubDate>Tue, 13 Sep 2005 10:39:00 GMT</pubDate></item><item><title><![CDATA[Reply to sort mit Klassen on Tue, 13 Sep 2005 11:09:50 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/201">@SideWinder</a>:<br />
Du meinst</p>
<pre><code class="language-cpp">class A {
};

int main()
{
   vector&lt;A*&gt; x;
   sort( x.begin(), x.end());
}
</code></pre>
<p>?<br />
In dem Fall wird less&lt;A*&gt;() aufgerufen, d.h. in etwa eine so aussehende Funktion:</p>
<pre><code class="language-cpp">bool less&lt;A*&gt;( const A* a, const A* b) 
{
   return a &lt; b;
}
</code></pre>
<p>d.h. es wird nicht A::operator&lt;() aufgerufen.<br />
Obiges Beispiel compiliert, während die Variante mit vector&lt;A&gt; aufgrund des fehlenden A::operator&lt; nicht compiliert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/870986</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/870986</guid><dc:creator><![CDATA[niemand]]></dc:creator><pubDate>Tue, 13 Sep 2005 11:09:50 GMT</pubDate></item></channel></rss>