<?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] Probleme mit der priority_queue]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich moechte innerhalb einer Methode gerne eine &quot;priority_queue&quot; mit Objekten einer anderen Klasse fuellen:</p>
<pre><code class="language-cpp">// Datenklasse
class MyData
{
public:
    MyData();
    operator&lt; (const MyData&amp; x) { return prio &lt; x.prio; }

private:
    int prio;
};
</code></pre>
<p>Nun muss ich ja aber in der Methode __Zeiger__ auf diese Objekte einfuegen, damit ich spaeter wieder darauf zugreifen kann:</p>
<pre><code class="language-cpp">class Applikation
{
    void fuelleQueue();
    // ...
};

Applikation::fuelleQueue()
{
    priority_queue&lt; MyData* &gt; pq;

    // Daten ermitteln und Objekt erstellen...
    MyData* temp = new MyData();

    // In Queue einfuegen
    pq.push(temp);
}
</code></pre>
<p>Das funktioniert auch alles soweit ganz gut, ich kann dann in einer anderen Methode der Klasse &quot;Applikation&quot; ueber die Zeiger wieder an die Objekte kommen.</p>
<p>Nun zum eigentlichen Problem: Wenn ich vorgehe wie oben beschrieben, <strong>wird der &quot;operator&lt;&quot; nicht verwendet!</strong></p>
<p>Wenn ich meine Queue hingegen in dieser Art befuelle, werden die Datensaetze korrekt sortiert (&quot;operator&lt;&quot; wird aufgerufen):</p>
<pre><code class="language-cpp">Applikation::fuelleQueue()
{
    priority_queue&lt; MyData &gt; pq;

    // Daten ermitteln und Objekt erstellen...
    MyData temp();

    // In Queue einfuegen
    pq.push(temp);
</code></pre>
<p>Allerdings sind die lokalen Objekte dann nach dem Ende der Methode verloren!<br />
Irgendwie muss ich sicherlich den &quot;operator&lt;&quot; abaendern ... aber leider fehlt mir hier das fundierte Wissen ueber Zeigen/Referenzen etc. in C++ ... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f622.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--crying_face"
      title=";("
      alt="😢"
    /></p>
<p>Danke fuer eure Hilfe!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/112786/stl-probleme-mit-der-priority_queue</link><generator>RSS for Node</generator><lastBuildDate>Tue, 13 Oct 2026 08:32:01 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/112786.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 16 Jun 2005 09:59:38 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [STL] Probleme mit der priority_queue on Thu, 16 Jun 2005 09:59:38 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich moechte innerhalb einer Methode gerne eine &quot;priority_queue&quot; mit Objekten einer anderen Klasse fuellen:</p>
<pre><code class="language-cpp">// Datenklasse
class MyData
{
public:
    MyData();
    operator&lt; (const MyData&amp; x) { return prio &lt; x.prio; }

private:
    int prio;
};
</code></pre>
<p>Nun muss ich ja aber in der Methode __Zeiger__ auf diese Objekte einfuegen, damit ich spaeter wieder darauf zugreifen kann:</p>
<pre><code class="language-cpp">class Applikation
{
    void fuelleQueue();
    // ...
};

Applikation::fuelleQueue()
{
    priority_queue&lt; MyData* &gt; pq;

    // Daten ermitteln und Objekt erstellen...
    MyData* temp = new MyData();

    // In Queue einfuegen
    pq.push(temp);
}
</code></pre>
<p>Das funktioniert auch alles soweit ganz gut, ich kann dann in einer anderen Methode der Klasse &quot;Applikation&quot; ueber die Zeiger wieder an die Objekte kommen.</p>
<p>Nun zum eigentlichen Problem: Wenn ich vorgehe wie oben beschrieben, <strong>wird der &quot;operator&lt;&quot; nicht verwendet!</strong></p>
<p>Wenn ich meine Queue hingegen in dieser Art befuelle, werden die Datensaetze korrekt sortiert (&quot;operator&lt;&quot; wird aufgerufen):</p>
<pre><code class="language-cpp">Applikation::fuelleQueue()
{
    priority_queue&lt; MyData &gt; pq;

    // Daten ermitteln und Objekt erstellen...
    MyData temp();

    // In Queue einfuegen
    pq.push(temp);
</code></pre>
<p>Allerdings sind die lokalen Objekte dann nach dem Ende der Methode verloren!<br />
Irgendwie muss ich sicherlich den &quot;operator&lt;&quot; abaendern ... aber leider fehlt mir hier das fundierte Wissen ueber Zeigen/Referenzen etc. in C++ ... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f622.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--crying_face"
      title=";("
      alt="😢"
    /></p>
<p>Danke fuer eure Hilfe!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/810336</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/810336</guid><dc:creator><![CDATA[knutsen]]></dc:creator><pubDate>Thu, 16 Jun 2005 09:59:38 GMT</pubDate></item><item><title><![CDATA[Reply to [STL] Probleme mit der priority_queue on Thu, 16 Jun 2005 10:04:02 GMT]]></title><description><![CDATA[<p>du musst die funktion zum sortieren mit angeben.<br />
schau dir mal das an<br />
<a href="http://www.cpp-tutor.de/cpp/le13/le13_04.htm#pqueue" rel="nofollow">http://www.cpp-tutor.de/cpp/le13/le13_04.htm#pqueue</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/810341</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/810341</guid><dc:creator><![CDATA[miller_m]]></dc:creator><pubDate>Thu, 16 Jun 2005 10:04:02 GMT</pubDate></item><item><title><![CDATA[Reply to [STL] Probleme mit der priority_queue on Thu, 16 Jun 2005 10:25:25 GMT]]></title><description><![CDATA[<p>miller_m schrieb:</p>
<blockquote>
<p>du musst die funktion zum sortieren mit angeben.<br />
schau dir mal das an<br />
<a href="http://www.cpp-tutor.de/cpp/le13/le13_04.htm#pqueue" rel="nofollow">http://www.cpp-tutor.de/cpp/le13/le13_04.htm#pqueue</a></p>
</blockquote>
<p>Danke!</p>
<p>Habe mir jetzt mal ein entsprechenden Funktionsobjekt definiert:</p>
<pre><code class="language-cpp">struct VergleicheMyData
{
    bool operator() (MyData* x,
                     MyData* y) const
    {
        return (x-&gt;getPrio() &gt; y-&gt;getPrio());
    }
};

[...]

// Nun die Queue:
VergleicheMyData cmpFunc;
priority_queue&lt; MyData*, 
                vector&lt; MyData* &gt;, 
                VergleicheMyData &gt; pq(cmpFunc);
</code></pre>
<p>Funktioniert nun auch wie gewuenscht. Allerdings frage ich mich nun, ob das aus &quot;stil-&quot; sowie performance-technischen Gruenden so okay ist?</p>
<p>Vielen Dank!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/810366</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/810366</guid><dc:creator><![CDATA[knutsen]]></dc:creator><pubDate>Thu, 16 Jun 2005 10:25:25 GMT</pubDate></item><item><title><![CDATA[Reply to [STL] Probleme mit der priority_queue on Thu, 16 Jun 2005 10:35:39 GMT]]></title><description><![CDATA[<p>Ja, das ist stilistisch okay und Performance-Technisch super, weil die Vergleichs-Funktion zur Compilezeit bekannt ist und damit sogar geinlined werden kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/810376</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/810376</guid><dc:creator><![CDATA[Jester]]></dc:creator><pubDate>Thu, 16 Jun 2005 10:35:39 GMT</pubDate></item><item><title><![CDATA[Reply to [STL] Probleme mit der priority_queue on Tue, 08 Apr 2008 12:56:07 GMT]]></title><description><![CDATA[<p>Kann man eigentlich in einer priority_queue das TOP Element irgendwie aktualisieren? Bisher muß man es sich rauskopieren, etwas ändern und neu einfügen. Wäre es nicht irgendiwe möglich der Queue zu sagen, daß sich dieses Element geändert hat und neu sortiert werden soll?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1488497</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1488497</guid><dc:creator><![CDATA[GmbH]]></dc:creator><pubDate>Tue, 08 Apr 2008 12:56:07 GMT</pubDate></item></channel></rss>