Linguaggio C++

Libreria Queue

Introduzione alla libreria queue del C++: utilizzo dei contenitori queue e priority_queue, metodi principali e laboratorio guidato.

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

MetodoDescrizione
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

MetodoDescrizione
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.


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_queue per una “lista processi” tipo sistema operativo.
  • Realizza un programma che gestisce in modo alternato due code separate.