Menu
Coddy logo textTech

Kolejka priorytetowa

Lekcja 12 z 23 w kursie C++ – Standardowa biblioteka szablonów w Coddy.

W C++ mamy również strukturę danych o nazwie kolejka priorytetowa. Kolejka priorytetowa zapewnia specjalną funkcjonalność, której nie ma zwykła kolejka: każdemu elementowi przypisana jest wartość priorytetu, a elementy są obsługiwane na podstawie tego priorytetu.

W kolejce priorytetowej jako pierwszy usuwany jest element o najwyższym priorytecie.

Podstawowa kolejka priorytetowa jest skonstruowana tak, że jej pierwszy element jest największy ze wszystkich, a pozostałe są posortowane w kolejności malejącej.

priority_queue<dataType> queueName

Najpierw musimy dołączyć plik nagłówkowy kolejki priorytetowej na początku naszego pliku C++. 

Tworzymy kolejkę priorytetową tak jak pozostałe poznane już kontenery.

priority_queue<int> integers;

Następnie używamy metody push(), aby dodać nowe elementy do kolejki. Element zostaje dodany, a jeśli jest większy od wszystkich pozostałych, będzie przechowywany jako pierwszy. Jeśli jest mniejszy od wszystkich pozostałych elementów, będzie przechowywany jako ostatni i tak dalej.

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

Do wyświetlania elementów używamy metody top(), tak jak w przypadku stosu. Wyświetla ona element o najwyższym priorytecie; w przypadku liczb całkowitych będzie to największa liczba.

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

Elementy usuwamy również tak jak ze stosu, za pomocą metody pop(). Usuwa ona element ze szczytu, czyli element o najwyższym priorytecie. W przypadku liczb jest to największa z nich.

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

Możemy zmienić priorytet kolejki, według którego sortowane są elementy. Możemy na przykład zadeklarować kolejkę priorytetową, która sortuje liczby całkowite w kolejności rosnącej, jak poniżej:

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

W tej kolejce wstawiane elementy są sortowane w kolejności rosnącej. Gdy zechcemy wyświetlić element ze szczytu lub usunąć go za pomocą metody pop(), zostanie wyświetlona lub usunięta najmniejsza liczba.

Na razie nie przejmuj się używaniem kolejki priorytetowej w inny sposób ani zmianą priorytetu. Pamiętaj tylko, że ta struktura danych jest dostępna do naszego użytku, więc możemy sortować elementy według pewnego rodzaju priorytetu


Metody kolejki priorytetowej

MetodaFunkcjonalność
size()Zwraca liczbę elementów w kolejce
empty()Zwraca true, jeśli kolejka jest pusta, a w przeciwnym razie false
swap()Zamienia zawartość jednej kolejki na zawartość innej
challenge icon

Wyzwanie

Łatwy

Podana jest liczba N z wejścia. W kolejnych N wierszach otrzymasz po jednej liczbie. Używając kolejki priorytetowej, wypisz wprowadzone liczby od największej do najmniejszej (w kolejności malejącej).

 

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

Spróbuj swoich sił

#include <queue>
#include <iostream

using namespace std;

int main()
{
    // Enter your code here

    return 0;
}

Wszystkie lekcje w sekcji C++ – Standardowa biblioteka szablonów

Poćwicz samodzielnie: Kompilator C++ online