Come utilizzare STL priority_queue
per struct? Qualsiasi illustrazione di spingere & popping, dove struct ha più tipi di dati?
dire: struct thing { int a; char b;} glass[10];
.
Ora come posso mettere questa struttura su priority_queue usando 'int a' per l'ordine?stl priority_queue di C++ con struct
risposta
Ecco una risposta leggermente modificata a your original question, which you deleted senza alcun motivo apparente. L'originale conteneva informazioni sufficienti per poterlo capire, ma ecco qui: fornire un confronto inferiore a quello che utilizza lo int
per il confronto.
Tutto ciò che dovete fare è fornire un funtore che implementa un confronto inferiore a un rigoroso ordine debole, o un operatore di minore rispetto per la vostra classe che implementa lo stesso. Questo struct soddisfa i requisiti:
struct thing
{
int a;
char b;
bool operator<(const thing& rhs) const
{
return a < rhs.a;
}
};
poi
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();
sovraccarico <
dell'operatore per 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();
È necessario implementare una funzione di confronto o sovraccarico operatore per dire coda di priorità che in quale ordine si desidera ordinare i dati personalizzati. Quando la coda prioritaria ordinerà i tuoi dati, allora avrà bisogno di un modo per sapere come confrontare tra loro. È necessario specificarlo passando una funzione alla coda di priorità o all'operatore di overload nella classe o struttura di dati personalizzata.
È possibile controllare la risposta this. This potrebbe aiutarti. Ho cercato di spiegare più modi di utilizzare la coda di priorità per i tipi di dati personalizzati.
- 1. Inseritori per stack STL e priority_queue
- 2. C equivalente di C++ STL
- 3. Utilizzo di STL con Android NDK C++
- 4. Coda di priorità STL e sovraccarico con puntatori
- 5. Struct con membro di matrice in C
- 6. Struttura memoria di C struct con array
- 7. Struct con variabili di modello in C++
- 8. C Prototipo di funzione con argomento Struct
- 9. C++ stl convolution
- 10. Problem solving in C++ con STL
- 11. C++ STL Permutazione Prossimo con Combinazione
- 12. C errore ++ STL rimuovere
- 13. struct allineamento C/C++
- 14. Comparatori in std :: priority_queue
- 15. C++ UNICODE e STL
- 16. debug di codice C++ con modelli e STL con gdb
- 17. C++ STL set: Confronta oggetto con lo stato estrinseca
- 18. Utilizzo di classi locali con algoritmi STL
- 19. RAII e C++ STL
- 20. C++ STL pop_heap non funziona
- 21. XML to C struct e C struct to XML
- 22. C/C++ Struct vs Class
- 23. Scopo della struct, typedef struct, in C++
- 24. C# struct con oggetto come membro dati
- 25. problema con struct e proprietà in C#
- 26. C/C++: Puntatori all'interno di Const Struct
- 27. Parsing interi con STL
- 28. intesa C dimensioni ++ struct
- 29. C array di struct dichiarazione
- 30. dimensione di struct in C
Grazie^_^ e solo 1 ultima cosa: come spingerò dire (3, a) alla coda direttamente? Non so come mettere (3, a) in 'cose roba = ** ... **'. –
In C++ 11, si può dire 'q.push (cosa {42, 'x'})' o 'q.emplace (42, 'x')'. Se non hai il supporto per C++ 11, devi dare a 'thing' un costruttore. – juanchopanza