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
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();
Ü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();
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.
- 1. Kuvertiermaschinen für STL-Stack und priority_queue
- 2. Verwendung einer STL-Liste eines Struct in C++
- 3. C-Äquivalent von C++ STL
- 4. C++ Vektor priority_queue von Strings mit benutzerdefinierten Zeichenfolgen Komparator
- 5. Wie Implementieren Methode Sortierung für ein C++ priority_queue mit Zeigern
- 6. Partielle C++ Template-Spezialisierung mit STL-Containern
- 7. Erweiterung der Funktion std :: priority_queue
- 8. C++ Sortiermatrix Zeile mit STL
- 9. mit Vergleichsfunktion in stl Containern
- 10. c, Probleme mit der Verwendung von struct
- 11. Überladen von C++ STL-Methoden
- 12. C++ struct
- 13. Datenstrukturen Äquivalente von STL-Containern
- 14. Min Heap mit STL Priority Queue Erklärung
- 15. Ein gutes C-Äquivalent von STL-Vektor?
- 16. C Funktionsprototyp mit Struct-Argument
- 17. C++ STL-konforme Allocatoren
- 18. Binäre Suche C++ STL
- 19. C++ stl Faltung
- 20. C++ und STL Auffrischungskurs
- 21. Make priority_queue sortieren nach mindestens
- 22. C++ STL verkettete Liste
- 23. P/Invoke Struct mit Zeigern, C++ von C#
- 24. C++ STL-Datenstrukturausrichtung, Algorithmusvektorisierung
- 25. STL-Prioritätswarteschlange und Überladen mit Zeigern
- 26. RAII und C++ STL
- 27. Speicherzuweisung in STL C++
- 28. STL Liste Problem C
- 29. debuggen von C++ - Code mit Templates und STL mit gdb
- 30. Extern struct in C
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. –
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