<?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[Compare Funktion für priority_queue]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich brauche für eine priority_queue eine Vergleichsfunktion, die mir alle Werte gleich -1 nach hinten sortiert. Werte ungleich -1 sollen nach der normalen Ordnung aufsteigend sortiert sein.<br />
Z.B. käme bei der Menge {6, 2, -1, 1} folgende Ordnung zustande: 1, 2, 6, -1.<br />
Ich habe folgendes geschrieben, nur irgendwie scheint da ein Denkfehler drin zu sein, denn sie wählt immer das größte Element != -1.</p>
<pre><code class="language-cpp">class comp
{
    public:
    bool operator()(node* lhs, node* rhs)
    {
        if (lhs-&gt;distance == -1)
            return false;
        else if (lhs-&gt;distance &lt; rhs-&gt;distance)
            return true;
        else
            return false;
    }
};
</code></pre>
<p>Danke für die Hilfe.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/267967/compare-funktion-für-priority_queue</link><generator>RSS for Node</generator><lastBuildDate>Wed, 02 Sep 2026 05:12:54 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/267967.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 02 Jun 2010 00:13:06 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Compare Funktion für priority_queue on Wed, 02 Jun 2010 00:13:06 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich brauche für eine priority_queue eine Vergleichsfunktion, die mir alle Werte gleich -1 nach hinten sortiert. Werte ungleich -1 sollen nach der normalen Ordnung aufsteigend sortiert sein.<br />
Z.B. käme bei der Menge {6, 2, -1, 1} folgende Ordnung zustande: 1, 2, 6, -1.<br />
Ich habe folgendes geschrieben, nur irgendwie scheint da ein Denkfehler drin zu sein, denn sie wählt immer das größte Element != -1.</p>
<pre><code class="language-cpp">class comp
{
    public:
    bool operator()(node* lhs, node* rhs)
    {
        if (lhs-&gt;distance == -1)
            return false;
        else if (lhs-&gt;distance &lt; rhs-&gt;distance)
            return true;
        else
            return false;
    }
};
</code></pre>
<p>Danke für die Hilfe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1905717</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1905717</guid><dc:creator><![CDATA[farw]]></dc:creator><pubDate>Wed, 02 Jun 2010 00:13:06 GMT</pubDate></item><item><title><![CDATA[Reply to Compare Funktion für priority_queue on Wed, 02 Jun 2010 00:35:11 GMT]]></title><description><![CDATA[<p>ich nehme mal an, dass die returns (false/true) dem Sinn-Ensprechend richtig gesetzt sind.</p>
<p>Ich denke der Fehler liegt daran, dass aus rhs == -1 sein kann. Der fall ist nicht abgedeckt und wird somit &quot;normal&quot; verglichen mit den anderen Zahlen.<br />
versuch mal mit</p>
<pre><code class="language-cpp">if(rhs-&gt;distance == -1)
  return true;
</code></pre>
<p>ist ungetestet</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1905719</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1905719</guid><dc:creator><![CDATA[BigNeal]]></dc:creator><pubDate>Wed, 02 Jun 2010 00:35:11 GMT</pubDate></item><item><title><![CDATA[Reply to Compare Funktion für priority_queue on Wed, 02 Jun 2010 04:47:56 GMT]]></title><description><![CDATA[<p>Jepp, dein comparator is falsch.</p>
<pre><code class="language-cpp">struct comp
{
    bool operator()(node const* lhs, node const* rhs) const
    {
        bool specialL = lhs-&gt;distance == -1;
        bool specialR = rhs-&gt;distance == -1;
        if (specialL != specialR) {
            return specialR;
        } else {
            return lhs-&gt;distance &lt; rhs-&gt;distance;
        }
    }
};
</code></pre>
<p>müsste klappen</p>
<p>Unter der Annahme, dass distance vom Typ int ist und außer -1 keine anderen negativen Zahlen zugelassen werden, könnte man es auch so machen:</p>
<pre><code class="language-cpp">struct comp
{
    bool operator()(node const* lhs, node const* rhs) const
    {
        unsigned int l = lhs-&gt;distance; // -1 wird automatisch zu UINT_MAX
        unsigned int r = rhs-&gt;distance; // -1 wird automatisch zu UINT_MAX
        return l&lt;r;
    }
};
</code></pre>
<p>kk</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1905727</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1905727</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Wed, 02 Jun 2010 04:47:56 GMT</pubDate></item></channel></rss>