Per utilizzare C ++ Priority_Queue, il programma dovrebbe iniziare con il codice come:
#includere
#includere
Utilizzo dello spazio dei nomi std;
Include la libreria di code nel programma.
Per continuare a leggere, il lettore avrebbe dovuto avere una conoscenza di base di C++.
Contenuto dell'articolo
Costruzione di base
La struttura dei dati deve essere costruita prima di poter essere utilizzata. Costruzione qui significa istanziare un oggetto dalla classe di coda della biblioteca. L'oggetto in coda deve quindi avere un nome dato dal programmatore. La sintassi più semplice per creare una coda prioritaria è:
priorità_queueQueuename;
Con questa sintassi, il valore maggiore viene rimosso per primo. Un esempio dell'istanziazione è:
priorità_queuePQ;
O
priorità_queuePQ;
Il vettore e il deque sono due strutture di dati in c++. Un priority_queue può essere creato con uno di essi. La sintassi per creare una coda prioritaria dalla struttura vettoriale è:
priorità_queue, confronta> pq;
Un esempio di questa istanza è:
priorità_queue, meno > PQ;
Notare il divario tra> e> alla fine della dichiarazione. Questo per prevenire la confusione con >>. Il codice di confronto predefinito è "inferiore", il che significa che il più grande, e non necessariamente il primo valore, verrebbe rimosso per primo. Quindi, la dichiarazione di creazione può essere semplicemente scritta come:
priorità_queue> PQ;
Se il valore minimo deve essere rimosso prima, allora l'istruzione deve essere:
priorità_queue, maggiore > PQ;
Importanti funzioni dei membri
La funzione push ()
Questa funzione spinge un valore, che è il suo argomento, nella priorità_queue. Restituisce vuoto. Il seguente codice illustra questo:
priorità_queuePQ;
PQ.push (10);
PQ.push (30);
PQ.push (20);
PQ.push (50);
PQ.push (40);
Questa priorità_queue ha ricevuto 5 valori interi nell'ordine di 10, 30, 20, 50, 40. Se tutti questi elementi devono essere espulsi dalla coda prioritaria, allora usciranno nell'ordine di 50, 40, 30, 20, 10.
La funzione pop ()
Questa funzione rimuove da priorità_queue il valore con la massima priorità. Se il codice di confronto è "maggiore", rimuoverà l'elemento con il valore più piccolo. Se chiamato di nuovo, rimuove l'elemento successivo con il valore più piccolo del resto; Chiamato di nuovo, rimuove il prossimo valore più piccolo presente, e così via. Restituisce vuoto. Il seguente codice illustra questo:
priorità_queue, maggiore > PQ;
PQ.push ('a');
PQ.push ('c');
PQ.push ('b');
PQ.push ('e');
PQ.push ('d');
Si noti che per chiamare una funzione membro, il nome dell'oggetto deve essere seguito da un punto e quindi dalla funzione.
La funzione top ()
IL pop() la funzione rimuove il valore successivo della massima priorità, ma non la restituisce, come pop() è una funzione vuota. Usa il superiore() funzione per conoscere il valore della massima priorità che deve essere rimossa successivamente. IL superiore() La funzione restituisce una copia del valore della massima priorità nella priorità. Il seguente codice, in cui il valore successivo della massima priorità è il minimo valore, illustra questo
priorità_queue, maggiore > PQ;
PQ.push ('a'); PQ.push ('c'); PQ.push ('b'); PQ.push ('e'); PQ.push ('d');
char ch1 = pq.superiore(); PQ.pop();
char ch2 = pq.superiore(); PQ.pop();
char ch3 = pq.superiore(); PQ.pop();
char ch4 = pq.superiore(); PQ.pop();
char ch5 = pq.superiore(); PQ.pop();
cout<L'output è 'a "b" c "d" e'.
La funzione vuota ()
Se un programmatore utilizza il file superiore() Funzione su una priorità vuota_queue, dopo la raccolta riuscita, riceverebbe un messaggio di errore come:Guasto di segmentazione (core scaricato)Quindi, controlla sempre se la coda prioritaria non è vuota prima di usare il superiore() funzione. IL vuoto() La funzione membro restituisce un bool, vero, se la coda è vuota e falsa se la coda non è vuota. Il seguente codice illustra questo:
priorità_queuePQ;
int i1 = 10; int i2 = 30; int i3 = 20; int i4 = 50; int i5 = 40;
PQ.push (i1); PQ.push (i2); PQ.push (i3); PQ.push (i4); PQ.push (i5);
Mentre(!PQ.vuoto())
cout << pq.top() << ";
PQ.pop();
cout << '\n';Altre funzioni di coda prioritaria
La funzione size ()
Questa funzione restituisce la lunghezza della coda prioritaria, come illustra il seguente codice:priorità_queuePQ;
int i1 = 10; int i2 = 30; int i3 = 20; int i4 = 50; int i5 = 40;
PQ.push (i1); PQ.push (i2); PQ.push (i3); PQ.push (i4); PQ.push (i5);
int len = pq.misurare();
cout << len << '\n';L'output è 5.
La funzione Swap ()
Se due priorità_queues sono dello stesso tipo e dimensioni, possono essere scambiati da questa funzione, come mostra il seguente codice:priorità_queuePQ1;
int i1 = 10; int i2 = 30; int i3 = 20; int i4 = 50; int i5 = 40;
PQ1.push (i1); PQ1.push (i2); PQ1.push (i3); PQ1.push (i4); PQ1.push (i5);
priorità_queuePQA;
int it1 = 1; int it2 = 3; int it3 = 2; int it4 = 5; int it5 = 4;
pqa.push (it1); pqa.push (it2); pqa.push (it3); pqa.push (it4); pqa.push (it5);
PQ1.swap (pqa);
Mentre(!PQ1.vuoto())
cout << pq1.top() << ";
PQ1.pop();
Cout<<'\n';
Mentre(!pqa.vuoto())
cout << pqA.top() << ";
pqa.pop();
Cout<<'\n';L'output è:
5 4 3 2 1
50 40 30 20 20 10La creazione di emplace ()
IL emplace () La funzione è simile alla funzione push. Il seguente codice illustra questo:priorità_queuePQ1;
int i1 = 10; int i2 = 30; int i3 = 20; int i4 = 50; int i5 = 40;
PQ1.emplace (i1);
PQ1.emplace (i2);
PQ1.emplace (i3);
PQ1.emplace (i4);
PQ1.emplace (i5);
Mentre(!PQ1.vuoto())
cout << pq1.top() << ";
PQ1.pop();
Cout<<'\n';L'output è:
50 40 30 20 20 10Dati di stringa
Quando si confrontano le stringhe, la classe di stringa dovrebbe essere usata e non l'uso diretto dei letterali delle stringhe perché confronterebbe i puntatori e non le stringhe effettive. Il seguente codice mostra come viene utilizzata la classe String:
#includere
priorità_queuePQ1;
String s1 = string ("penna"),
S2 = String ("Pencil"),
s3 = string ("libro di allenamento"),
s4 = string ("libro di testo"),
s5 = string ("righello");
PQ1.push (S1);
PQ1.push (S2);
PQ1.push (S3);
PQ1.push (S4);
PQ1.push (S5);
Mentre(!PQ1.vuoto())
cout << pq1.top() << " ";
PQ1.pop();
Cout<<'\n';L'output è:
libro di esercizi del righello del sovrano di testoAltre costruzioni in coda prioritaria
Creazione esplicita da un vettore
Una coda prioritaria può essere creata esplicitamente da un vettore come mostra il seguente codice:#includere
vettorevtr = 10, 30, 20, 50, 40;
priorità_queuePQ (VTR.inizio (), vtr.FINE());
Mentre(!PQ.vuoto())
cout << pq.top() << ";
PQ.pop();
Cout<<'\n';L'uscita è: 50 40 30 20 10. Questa volta, anche l'intestazione vettoriale deve essere inclusa. Gli argomenti per la funzione del costruttore prendono i puntatori di inizio e fine del vettore. Il tipo di dati per il vettore e il tipo di dati per priority_queue deve essere lo stesso.
Al fine di rendere il minimo valore la priorità, la dichiarazione per il costruttore sarebbe:
priorità_queue, maggiore> int>> pq (VTR.inizio (), vtr.FINE()); Creazione esplicita da un array
Una coda prioritaria può essere creata esplicitamente da un array come mostra il seguente codice:int arr [] = 10, 30, 20, 50, 40;
priorità_queuePQ (arr, arr+5);
Mentre(!PQ.vuoto())
cout << pq.top() << ";
PQ.pop();
Cout<<'\n';L'uscita è: 50 40 30 20 10. Gli argomenti per la funzione del costruttore prendono i puntatori di inizio e fine dell'array. ARR restituisce il puntatore di avvio, "arr+5" restituisce il puntatore appena oltre l'array e 5 ha la dimensione dell'array. Il tipo di dati per l'array e il tipo di dati per priority_queue deve essere lo stesso.
Al fine di rendere il minimo valore la priorità, la dichiarazione per il costruttore sarebbe:
priorità_queue, maggiore > PQ (arr, arr+5); Nota: in C ++, la priorità_queue è effettivamente chiamata adattatore, non solo un contenitore.
Codice di confronto personalizzato
Avere tutti i valori nella coda prioritaria ascendente o tutta la decrescenza non è l'unica opzione per la coda prioritaria. Ad esempio, un elenco di 11 numeri interi per un mucchio massimo è:
88, 86, 87, 84, 82, 79,74, 80, 81 ,,, 64, 69Il valore più alto è 88. Questo è seguito da due numeri: 86 e 87, che sono inferiori a 88. Il resto dei numeri è inferiore a questi tre numeri, ma non in realtà. Ci sono due celle vuote nell'elenco. I numeri 84 e 82 sono inferiori a 86. I numeri 79 e 74 sono inferiori a 87. I numeri 80 e 81 sono inferiori a 84. I numeri 64 e 69 sono inferiori a 79.
Il posizionamento dei numeri segue i criteri massimi di heap - vedi più tardi. Al fine di fornire tale schema per priorità_queue, il programmatore deve fornire il proprio codice di confronto - vedere più tardi.
Conclusione
A C ++ Priority_Queue è una coda del primo in primo piano. La funzione membro, spingere(), Aggiunge un nuovo valore alla coda. La funzione membro, superiore(), Legge il valore superiore in coda. La funzione membro, pop(), rimuove senza restituire il valore superiore della coda. La funzione membro, vuoto(), controlla se la coda è vuota. Tuttavia, la priorità_queue differisce dalla coda, in questo segue un algoritmo prioritario. Può essere più grande, dal primo all'ultimo, o meno, dal primo all'ultimo. I criteri (algoritmo) possono anche essere definiti dal programmatore.