La libreria <queue> fornisce due strutture fondamentali:
- std::queue → coda FIFO (First-In, First-Out)
- std::priority_queue → coda con priorità
Una queue è ideale per simulare code reali: biglietterie, processi, richieste, eventi.
1️⃣ Inclusione della libreria
#include <queue>
using namespace std;
2️⃣ Dichiarazione e inizializzazione
queue Q;
queue clienti;
3️⃣ Metodi principali di std::queue
| Metodo | Descrizione |
|---|---|
push(x) | Inserisce un elemento in fondo |
pop() | Rimuove l elemento in testa |
front() | Restituisce l elemento in testa |
back() | Restituisce l elemento in coda |
empty() | Verifica se è vuota |
size() | Numero di elementi |
4️⃣ Esempio base: aggiunta e rimozione
queue Q;
Q.push(10);
Q.push(20);
Q.push(30);
cout << Q.front(); // 10
Q.pop(); // rimuove 10
cout << Q.front(); // 20
5️⃣ Simulazione di una coda
queue clienti;
clienti.push("Anna");
clienti.push("Luca");
cout << "Serve: " << clienti.front(); // Anna
clienti.pop(); // Anna esce
6️⃣ priority_queue – coda con priorità
Una priority_queue estrae sempre il valore massimo (ordine decrescente).
priority_queue P;
P.push(10);
P.push(50);
P.push(20);
cout << P.top(); // 50
P.pop(); // rimuove 50
Per rendere una priority_queue crescente (min-heap):
priority_queue, greater> Pmin;
7️⃣ Metodi di priority_queue
| Metodo | Descrizione |
|---|---|
push(x) | Inserisce un valore |
pop() | Rimuove l elemento con priorità più alta |
top() | Mostra l elemento prioritario |
empty() | Verifica se è vuota |
size() | Numero di elementi |
8️⃣ Esempio di priority_queue con coppie
Molto utile per gestire eventi o riproduzione di task con priorità.
priority_queue> eventi;
eventi.push({3, "Basso"});
eventi.push({10, "Alto"});
eventi.push({5, "Medio"});
// estrae in ordine di priorità (primo elemento della coppia)
cout << eventi.top().second;
LABORATORIO
Uso dei Contenitori queue e priority_queue
In questo laboratorio imparerai a simulare una coda di attesa e
una gestione di eventi con priorità decrescente usando queue
e priority_queue.
- Libreria
<queue> - Strutture queue e priority_queue
- Simulazioni reali
1 Simulare una fila al supermercato
Crea una queue di clienti.
Ogni cliente è una stringa.
Simula l arrivo di 5 clienti e servine 3.
queue fila;
fila.push("Anna");
fila.push("Luca");
fila.push("Marco");
fila.push("Sara");
fila.push("Giulia");
for(int i=0; i<3; i++){
cout << "Serve: " << fila.front() << endl;
fila.pop();
}
2 Gestione eventi con priorità
Simula eventi con priorità da 1 a 100 (100 = massima priorità).
priority_queue> eventi;
eventi.push({80, "Allarme"});
eventi.push({10, "Messaggio"});
eventi.push({50, "Aggiornamento"});
Estrai gli eventi finché la coda non è vuota.
while(!eventi.empty()){
cout << "Priorità: " << eventi.top().first
<< " - Evento: " << eventi.top().second << endl;
eventi.pop();
}
3 Esercizi
- Simula una coda di pazienti dove ogni paziente ha nome e sintomo.
- Implementa un sistema di ticket numerati crescente (1,2,3,…).
- Usa
priority_queueper una “lista processi” tipo sistema operativo. - Realizza un programma che gestisce in modo alternato due code separate.