<?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::set mit eigenem vergleichsoperator]]></title><description><![CDATA[<p>hola</p>
<p>wie mach ich das ?<br />
hab folgendes:</p>
<pre><code class="language-cpp">class Dataset;

bool DatasetLess(const Dataset *d1, const Dataset *d2)
{
   return *d1 &lt; *d2;
}

std::set&lt;Dataset*, DatasetLess&gt; liste; /* Zeile 28 */
</code></pre>
<p>bekomme nen fehler:</p>
<pre><code>[BCC32 Fehler] BaseTable.h(28): E2401 Ungültige Template-Argumentliste
</code></pre>
<p>wie mach ich das richtig ?</p>
<p>Meep Meep</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/189344/std-set-mit-eigenem-vergleichsoperator</link><generator>RSS for Node</generator><lastBuildDate>Fri, 25 Sep 2026 07:51:36 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/189344.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 11 Aug 2007 16:34:08 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to std::set mit eigenem vergleichsoperator on Sat, 11 Aug 2007 16:34:08 GMT]]></title><description><![CDATA[<p>hola</p>
<p>wie mach ich das ?<br />
hab folgendes:</p>
<pre><code class="language-cpp">class Dataset;

bool DatasetLess(const Dataset *d1, const Dataset *d2)
{
   return *d1 &lt; *d2;
}

std::set&lt;Dataset*, DatasetLess&gt; liste; /* Zeile 28 */
</code></pre>
<p>bekomme nen fehler:</p>
<pre><code>[BCC32 Fehler] BaseTable.h(28): E2401 Ungültige Template-Argumentliste
</code></pre>
<p>wie mach ich das richtig ?</p>
<p>Meep Meep</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1342808</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1342808</guid><dc:creator><![CDATA[Meep Meep]]></dc:creator><pubDate>Sat, 11 Aug 2007 16:34:08 GMT</pubDate></item><item><title><![CDATA[Reply to std::set mit eigenem vergleichsoperator on Sat, 11 Aug 2007 16:45:00 GMT]]></title><description><![CDATA[<p>Entweder:</p>
<pre><code class="language-cpp">class Dataset;

struct DatasetLess
{
    bool operator () (const Dataset *d1, const Dataset *d2) const
    {
        return *d1 &lt; *d2;
    }
};

std::set&lt;Dataset*, DatasetLess&gt; liste;
</code></pre>
<p>oder:</p>
<pre><code class="language-cpp">class Dataset;

bool DatasetLess(const Dataset *d1, const Dataset *d2)
{
   return *d1 &lt; *d2;
}

std::set&lt;Dataset*, bool (const Dataset*, const Dataset*)&gt; liste (&amp;DatasetLess);
</code></pre>
<p>Ersteres ist wahrscheinlich kompatibler (und funktioniert mit Sicherheit).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1342816</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1342816</guid><dc:creator><![CDATA[.filmor]]></dc:creator><pubDate>Sat, 11 Aug 2007 16:45:00 GMT</pubDate></item><item><title><![CDATA[Reply to std::set mit eigenem vergleichsoperator on Sat, 11 Aug 2007 16:47:20 GMT]]></title><description><![CDATA[<p>edit: missverständnis...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1342817</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1342817</guid><dc:creator><![CDATA[Airdamn]]></dc:creator><pubDate>Sat, 11 Aug 2007 16:47:20 GMT</pubDate></item><item><title><![CDATA[Reply to std::set mit eigenem vergleichsoperator on Sat, 11 Aug 2007 16:53:23 GMT]]></title><description><![CDATA[<p>.filmor schrieb:</p>
<blockquote>
<p>Entweder:</p>
<pre><code class="language-cpp">class Dataset;

struct DatasetLess
{
    bool operator () (const Dataset *d1, const Dataset *d2) const
    {
        return *d1 &lt; *d2;
    }
};

std::set&lt;Dataset*, DatasetLess&gt; liste;
</code></pre>
<p>oder:</p>
<pre><code class="language-cpp">class Dataset;

bool DatasetLess(const Dataset *d1, const Dataset *d2)
{
   return *d1 &lt; *d2;
}

std::set&lt;Dataset*, bool (const Dataset*, const Dataset*)&gt; liste (&amp;DatasetLess);
</code></pre>
<p>Ersteres ist wahrscheinlich kompatibler (und funktioniert mit Sicherheit).</p>
</blockquote>
<p>das hab ich ja noch nie bei der STL gesehen, das man einen funktionspointer uebergibt oder nur nen Klassennamen. was passiert da intern das der sowas haben will ? ansonsten uebergibt man doch immer ein functor-object oder eine statische/globale funktion.</p>
<p>kann mir das jemand erklaeren ?</p>
<p>Meep Meep</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1342823</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1342823</guid><dc:creator><![CDATA[Meep Meep]]></dc:creator><pubDate>Sat, 11 Aug 2007 16:53:23 GMT</pubDate></item><item><title><![CDATA[Reply to std::set mit eigenem vergleichsoperator on Sat, 11 Aug 2007 17:11:50 GMT]]></title><description><![CDATA[<p>Beim Ersten ist das ganz simpel. Der Vergleicher wird, wenn du kein Objekt des Vergleichtyps übergibst, standardkonstruiert. Das set hat also immer seinen persönlichen Vergleicher dabei, den es dann bei jeglichen Operationen mit comp(lhs, rhs) benutzt. Wenn du keinen Typ angibst, dann wird std::less&lt;Key&gt; verwendet, was ziemlich genau so aussieht, wie DatasetLess, nur halt ohne Dereferenzierung.</p>
<p>Im zweiten Fall (also der eigentlichen Korrektur deines Codes) muss dieser Typ der eines Funktionszeigers sein (DatasetLess ist dort /kein/ Typ!). Der Standardkonstruktor reicht für diesen nicht aus, also musst du noch ein Objekt (hier einen Funktionszeiger auf die DatasetLess-Funktion) übergeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1342833</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1342833</guid><dc:creator><![CDATA[.filmor]]></dc:creator><pubDate>Sat, 11 Aug 2007 17:11:50 GMT</pubDate></item></channel></rss>