Menu
Coddy logo textTech

Coda con priorità

Lezione 12 di 23 del corso C++ - Libreria standard dei template di Coddy.

In C++, abbiamo anche la struttura dati chiamata coda con priorità. La coda con priorità ci offre una funzionalità speciale che la coda normale non ha: a ogni elemento è associato un valore di priorità e gli elementi vengono serviti in base alla loro priorità.

Nella coda con priorità, l'elemento con la priorità più alta viene rimosso per primo.

Una coda con priorità di base è progettata in modo che il primo elemento della coda sia il più grande di tutti e gli altri siano ordinati in ordine decrescente.

priority_queue<dataType> queueName

Per prima cosa, dobbiamo includere il file header della coda con priorità all'inizio del nostro file C++. 

Creiamo la coda con priorità come gli altri contenitori già visti.

priority_queue<int> integers;

Successivamente, usiamo il metodo push() per aggiungere nuovi elementi alla coda. L'elemento viene aggiunto e, se è maggiore di tutti gli altri elementi, verrà memorizzato per primo. Se è minore di tutti gli altri elementi, verrà memorizzato per ultimo, e così via.

integers.push(5);  // integers = {5)

Per visualizzare gli elementi usiamo il metodo top(), come per lo stack. Visualizza l'elemento con la priorità più alta; nel caso degli interi, visualizzerà il numero più grande.

integers.push(100);  // integers = {100, 5}
integers.push(10);  // integers = {100, 10, 5}
integers.push(3);  // integers = {100, 10, 5, 3}
cout << integers.top();
Output:
100

Rimuoviamo gli elementi esattamente come con lo stack, usando il metodo pop(). Rimuove l'elemento in cima, quello con la priorità più alta. Nel caso dei numeri, il più grande.

integers.pop();  // integers = {10, 5, 3}
cout << integers.top();
Output:
10

Possiamo modificare la priorità della coda in base alla quale vengono ordinati gli elementi. Per esempio, possiamo dichiarare una coda con priorità che ordina gli interi in ordine crescente, come segue:

priority_queue<int, vector<int>, greater<int> > integers;

In questa coda, quando gli elementi vengono inseriti, sono ordinati in ordine crescente. Quando vogliamo visualizzare l'elemento in cima o rimuoverlo usando il metodo pop(), verrà visualizzato o rimosso il numero più piccolo.

Per ora, non preoccuparti di usare la coda con priorità in modo diverso e di modificarne la priorità. Ricorda solo che questa struttura dati è disponibile per essere utilizzata, così possiamo ordinare gli elementi in base a qualche tipo di priorità


Metodi della coda con priorità

MetodoFunzionalità
size()Restituisce il numero di elementi della coda
empty()Restituisce true se la coda è vuota, false altrimenti
swap()Scambia il contenuto di una coda con quello di un'altra
challenge icon

Sfida

Facile

Dato un numero N in input. Nelle successive N righe ti verrà dato un numero. Usando una coda con priorità, visualizza i numeri inseriti dal più grande al più piccolo (in ordine decrescente).

 

Input
5
10
50
20
40
30
Output
50 40 30 20 10

Provalo tu

#include <queue>
#include <iostream

using namespace std;

int main()
{
    // Enter your code here

    return 0;
}

Tutte le lezioni di C++ - Libreria standard dei template

Esercitati da solo: Compilatore C++ online