logo

Coda prioritaria in C++

La coda con priorità in C++ è un contenitore derivato in STL che considera solo l'elemento con priorità più alta. La coda segue la politica FIFO mentre la coda di priorità preleva gli elementi in base alla priorità, ovvero l'elemento con la priorità più alta viene estratto per primo.

È simile alla coda ordinaria per certi aspetti ma differisce nei seguenti modi:

  • In una coda con priorità, ogni elemento nella coda è associato ad una certa priorità, ma la priorità non esiste in una struttura dati della coda.
  • L'elemento con la priorità più alta in una coda con priorità verrà rimosso per primo mentre la coda segue FIFO (primo entrato, primo uscito) policy significa che l'elemento inserito per primo verrà eliminato per primo.
  • Se esiste più di un elemento con la stessa priorità, verrà preso in considerazione l'ordine dell'elemento in una coda.

Nota: la coda con priorità è la versione estesa di una coda normale, tranne per il fatto che l'elemento con la priorità più alta verrà rimosso per primo dalla coda con priorità.

Sintassi della coda prioritaria

 priority_queue variable_name; 

Comprendiamo la coda con priorità attraverso un semplice esempio.

Coda prioritaria in C++

Nell'illustrazione sopra, abbiamo inserito gli elementi utilizzando una funzione push() e l'operazione di inserimento è identica alla coda normale. Ma quando eliminiamo l'elemento dalla coda utilizzando una funzione pop(), l'elemento con la priorità più alta verrà eliminato per primo.

Funzione membro della coda prioritaria

Funzione Descrizione
spingere() Inserisce un nuovo elemento in una coda di priorità.
pop() Rimuove l'elemento in cima alla coda, che ha la priorità più alta.
superiore() Questa funzione viene utilizzata per indirizzare l'elemento più in alto di una coda con priorità.
misurare() Determina la dimensione di una coda con priorità.
vuoto() Verifica se la coda è vuota o meno. In base alla verifica, restituisce lo stato.
scambio() Scambia gli elementi di una coda con priorità con un'altra coda dello stesso tipo e dimensione.
posizione() Inserisce un nuovo elemento in cima alla coda di priorità.

Creiamo un semplice programma di coda prioritaria.

 #include #include using namespace std; int main() { priority_queue p; // variable declaration. p.push(10); // inserting 10 in a queue, top=10 p.push(30); // inserting 30 in a queue, top=30 p.push(20); // inserting 20 in a queue, top=20 cout&lt;<'number of elements available in 'p' :'<<p>In the above code, we have created a priority queue in which we insert three elements, i.e., 10, 30, 20. After inserting the elements, we display all the elements of a priority queue by using a while loop.<p></p> <p> <strong>Output</strong> </p> <pre> Number of elements available in &apos;p&apos; :3 30 20 10 zzzzz/ </pre> <p> <strong>Let&apos;s see another example of a priority queue.</strong> </p> <pre> #include #include using namespace std; int main() { priority_queue p; // priority queue declaration priority_queue q; // priority queue declaration p.push(1); // inserting element &apos;1&apos; in p. p.push(2); // inserting element &apos;2&apos; in p. p.push(3); // inserting element &apos;3&apos; in p. p.push(4); // inserting element &apos;4&apos; in p. q.push(5); // inserting element &apos;5&apos; in q. q.push(6); // inserting element &apos;6&apos; in q. q.push(7); // inserting element &apos;7&apos; in q. q.push(8); // inserting element &apos;8&apos; in q. p.swap(q); std::cout &lt;&lt; &apos;Elements of p are : &apos; &lt;&lt; std::endl; while(!p.empty()) { std::cout &lt;&lt; p.top() &lt;&lt; std::endl; p.pop(); } std::cout &lt;&lt; &apos;Elements of q are :&apos; &lt;&lt; std::endl; while(!q.empty()) { std::cout &lt;&lt; q.top() &lt;&lt; std::endl; q.pop(); } return 0; } </pre> <p>In the above code, we have declared two priority queues, i.e., p and q. We inserted four elements in &apos;p&apos; priority queue and four in &apos;q&apos; priority queue. After inserting the elements, we swap the elements of &apos;p&apos; queue with &apos;q&apos; queue by using a swap() function.</p> <p> <strong>Output</strong> </p> <pre> Elements of p are : 8 7 6 5 Elements of q are : 4 3 2 1 </pre> <hr></'number>

Vediamo un altro esempio di coda con priorità.

 #include #include using namespace std; int main() { priority_queue p; // priority queue declaration priority_queue q; // priority queue declaration p.push(1); // inserting element &apos;1&apos; in p. p.push(2); // inserting element &apos;2&apos; in p. p.push(3); // inserting element &apos;3&apos; in p. p.push(4); // inserting element &apos;4&apos; in p. q.push(5); // inserting element &apos;5&apos; in q. q.push(6); // inserting element &apos;6&apos; in q. q.push(7); // inserting element &apos;7&apos; in q. q.push(8); // inserting element &apos;8&apos; in q. p.swap(q); std::cout &lt;&lt; &apos;Elements of p are : &apos; &lt;&lt; std::endl; while(!p.empty()) { std::cout &lt;&lt; p.top() &lt;&lt; std::endl; p.pop(); } std::cout &lt;&lt; &apos;Elements of q are :&apos; &lt;&lt; std::endl; while(!q.empty()) { std::cout &lt;&lt; q.top() &lt;&lt; std::endl; q.pop(); } return 0; } 

Nel codice precedente abbiamo dichiarato due code con priorità, ovvero p e q. Abbiamo inserito quattro elementi nella coda con priorità 'p' e quattro nella coda con priorità 'q'. Dopo aver inserito gli elementi, scambiamo gli elementi della coda 'p' con la coda 'q' utilizzando la funzione swap().

Produzione

 Elements of p are : 8 7 6 5 Elements of q are : 4 3 2 1