English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Corso di base C++

Controllo di flusso C++

Funzione C++

Array e stringhe C++

Strutture dati C++

Classi e oggetti C++

Puntatore C++

Ereditarietà C++

Corso di STL C++

Manuale di riferimento C++

Priority queue (priority_queue) C++

La coda di priorità in C++ è un contenitore derivato dello STL che considera solo l'elemento con la priorità più alta. La coda segue la strategia FIFO, mentre la coda di priorità elimina gli elementi in base alla priorità, ossia, l'elemento con la priorità più alta viene eliminato prima.

È simile a una coda ordinaria in alcuni aspetti, ma è diverso nei seguenti aspetti:

  • In una coda di priorità, ogni elemento nella coda è associato a una certa priorità, ma la priorità non esiste nella struttura dati della coda.

  • L'elemento con la priorità più alta nella coda di priorità verrà eliminato prima, e la coda segueFIFO (prima nell'ingresso, prima nell'uscita)Strategia, il che significaPrimaL'elemento inserito verrà eliminato prima.

  • Se ci sono più elementi con la stessa priorità, si considera l'ordine dell'elemento nella coda.

Attenzione: la coda di priorità è una versione estesa della coda ordinaria, ma l'elemento con la priorità più alta verrà eliminato prima dalla coda di priorità.

Sintassi della coda di priorità

priority_queue<int> variable_name;

Facciamo un esempio semplice per comprendere la coda di priorità.

Nell'immagine in alto, abbiamo inserito l'elemento utilizzando la funzione push() e l'operazione di inserimento è la stessa della coda ordinaria. Tuttavia, quando utilizziamo la funzione pop() per eliminare l'elemento dalla coda, l'elemento con la priorità più alta verrà eliminato prima.

Funzione membro della coda di priorità

FunzioneDescrizione
push()Inserisce un nuovo elemento nella coda di priorità.
pop()Elimina l'elemento con la priorità più alta dalla coda.
top()Questa funzione serve per indirizzare l'elemento più alto della coda di priorità.
size()Restituisce la dimensione della coda di priorità.
empty()Verifica se la coda è vuota. Sulla base della verifica, restituisce lo stato della coda.
swap()Scambia l'elemento della coda di priorità con un'altra coda di tipo e dimensione identici.
emplace()Inserisce un nuovo elemento nella cima della coda di priorità.

Creiamo un programma semplice di coda di priorità.

#include <iostream>
#include<queue>
using namespace std;
int main()
{
 priority_queue<int> p; // dichiarazione variabile
 p.push(10); // inserisci 10 nella coda, top=10
 p.push(30); // inserisci 30 nella coda, top=30
 p.push(20); // inserisci 20 nella coda, top=20
 cout << "Numero di elementi disponibili a 'p' :" << p.size() << endl;
 while(!p.empty())
 {
     std::cout << p.top() << std::endl; 
     p.pop();
 }
 return 0;
}

Nel codice sopra, abbiamo creato una coda di priorità e abbiamo inserito tre elementi, ovvero 10, 30, 20. Dopo aver inserito questi elementi, abbiamo utilizzato un ciclo while per visualizzare tutti gli elementi della coda di priorità.

Risultato di output

Numero di elementi disponibili a 'p' :3
30
20
10

Vediamo un altro esempio di coda di priorità.

#include <iostream>
#include<queue>
using namespace std;
int main()
{
   priority_queue<int> p; // dichiarazione coda di priorità
   priority_queue<int> q; // dichiarazione coda di priorità
   p.push(1); // inserisci '1' nella p.
   p.push(2); // inserisci '2' nella p.
   p.push(3); // inserisci '3' nella p.
   p.push(4); // inserisci '4' nella p.
   q.push(5); // inserisci '5' nella q.
   q.push(6); // inserisci '6' nella q.
   q.push(7); // inserisci '7' nella q.
   q.push(8); // inserisci '8' nella q.
   p.swap(q);
   std::cout << "p coda elementi è :" << std::endl;
   while(!p.empty())
   {
      std::cout << p.top() << std::endl;
       p.pop();
   }
   std::cout << "q priorità coda elementi è :" << std::endl;
    while(!q.empty())
   {
      std::cout << q.top() << std::endl;
       q.pop();
   }
    return 0;
}

Nel codice sopra, abbiamo dichiarato due priority queue, ovvero p e q. Abbiamo inserito quattro elementi nella priority queue 'p' e quattro elementi nella priority queue 'q'. Dopo aver inserito gli elementi, abbiamo utilizzato la funzione swap() per scambiare gli elementi della coda 'p' con quelli della coda 'q'.

Risultato di output

L'elemento della priority queue p è:                                                                                                             
8                                                                                                                               
7                                                                                                                               
6                                                                                                                               
5                                                                                                                               
L'elemento della priority queue q è:                                                                                                             
4                                                                                                                               
3                                                                                                                               
2                                                                                                                               
1