2013-03-24 8 views
5

Wie können wir STL priority_queue für struct verwenden? Beliebig Abbildung Push von & Popping, wo Struktur hat mehrere Datentypen?
Sprich: struct thing { int a; char b;} glass[10];.
Nun, wie kann ich diese Struktur auf priority_queue setzen mit 'int a' für die Bestellung?stl priority_queue von C++ mit struct

Antwort

12

Hier ist eine leicht modifizierte Antwort auf your original question, which you deleted ohne ersichtlichen Grund. Das Original enthielt genug Informationen für Sie, um dies herauszufinden, aber hier ist es: Stellen Sie einen weniger als Vergleich, der die int zum Vergleich verwendet.

Alles, was Sie tun müssen, ist ein Funktor, der einen Less-Than-Vergleich mit strikt schwacher Ordnung implementiert, oder ein Kleiner-als-Operator für Ihre Klasse, die diese implementiert. Diese Struktur erfüllt die Anforderungen:

struct thing 
{ 
    int a; 
    char b; 
    bool operator<(const thing& rhs) const 
    { 
     return a < rhs.a; 
    } 
}; 

dann

std::priority_queue<thing> q; 
thing stuff = {42, 'x'}; 
q.push(stuff); 
q.push(thing{4242, 'y'}); // C++11 only 
q.emplace(424242, 'z'); // C++11 only  
thing otherStuff = q.top(); 
q.pop(); 
+0

Danke^_^ & nur 1 letzte Sache: Wie werde ich sagen (3, a) in die Schlange directilty? Ich weiß nicht, wie man (3, a) an "ding stuff = ** ... **" setzt. –

+0

In C++ 11 können Sie 'q.push (thing {42, 'x'})' oder 'q.emplace (42, 'x')' sagen. Wenn Sie keine C++ 11-Unterstützung haben, müssen Sie "Sache" einen Konstruktor geben. – juanchopanza

4

Überlastung < Betreiber für thing:

struct thing 
{ 
    int a; 
    char b; 

    bool operator<(const thing &o) const 
    { 
     return a < o.a; 
    } 
}; 

priority_queue<thing> pq; 

thing t1, t2, t3; 

// ... 

pq.push(t1); 
pq.push(t2); 

// ... 

t3 = pq.top(); 
pq.pop(); 
2

Sie benötigen eine Funktion oder Überlastung Operator implementieren vergleichen Prioritätswarteschlange zu sagen, dass auf In welcher Reihenfolge möchten Sie Ihre benutzerdefinierten Daten sortieren? Wenn die Prioritätswarteschlange Ihre Daten sortiert, müssen Sie wissen, wie Sie diese vergleichen können. Sie müssen dies angeben, indem Sie eine Funktion an die Prioritätswarteschlange oder den Überladungsoperator in Ihrer benutzerdefinierten Datenklasse oder -struktur übergeben.

Sie können this beantworten. This könnte Ihnen helfen. Ich habe versucht, mehrere Möglichkeiten der Verwendung der Prioritätswarteschlange für benutzerdefinierte Datentypen zu erklären.