Jak zaimplementować kolejkę priorytetową w C ++



W tym artykule znajdziesz szczegółową i wszechstronną wiedzę na temat implementacji kolejki priorytetów w C ++ wraz z przykładami.

Kolejka priorytetowa to kontener w STL. Jest to podobne do kolejki z wyjątkiem tego, że każdy element kolejki priorytetowej ma określony priorytet i kiedy pobieramy elementy z kolejki priorytetowej, elementy o najwyższym priorytecie są pobierane jako pierwsze. Podobnie jak kolejka priorytetowa, istnieje 10 różnych typów kontenerów STL . Kontener to obiekt przechowujący dane. Kontenery STL są implementowane za pomocą klas szablonów, dlatego dostosowanie ich do przechowywania różnych typów danych jest łatwe. W tym poście szczegółowo omówimy kolejkę Priority i koncepcje z nią związane. Poniższe wskazówki zostaną omówione w tym artykule dotyczącym kolejki priorytetowej w języku C ++:

Przechodząc do tego artykułu o kolejkach priorytetowych w języku C ++





Składniki STL

STL składa się z klas szablonów i funkcji, które mogą być używane jako standardowe podejście do przechowywania i przetwarzania danych. Omówmy składniki STL

Pojemniki W STL zdefiniowano 10 typów kontenerów, które są podzielone na 3 kategorie. Spośród tych 3 kolejki priorytetowe należą do kategorii kontenera pochodnego. Każda klasa kontenera ma własny zestaw funkcji, których można użyć do manipulowania danymi.



Algorytm - Algorytm to metoda używana do przetwarzania danych znajdujących się w obiekcie kontenera. STL zapewnia wiele różnych typów algorytmów, które mogą być używane do inicjalizacji, wyszukiwania, sortowania, łączenia, kopiowania. Algorytmy są implementowane za pomocą funkcji szablonów.

Iterator- Iterator to obiekt wskazujący na element w kontenerze. Iteratory mogą pomóc w poruszaniu się po zawartości kontenera. Iteratory są jak wskaźniki, które można zwiększać i zmniejszać. Działa jako łącze między algorytmem a kontenerem. Iteratory służą do manipulowania danymi przechowywanymi w kontenerze.

Przechodząc do tego artykułu o kolejkach priorytetowych w języku C ++



Sterty i kolejka priorytetowa

Jak widzieliśmy wcześniej Priority Queue należy do kategorii kontenerów pochodnych. Inni członkowie tej kategorii to stos i kolejka. Te kontenery pochodne są również znane jako adaptery kontenerów.

Stos, kolejka i kolejka priorytetowa są nazywane kontenerami pochodnymi, ponieważ są wykonane z różnych kontenerów sekwencji. Te kontenery nie obsługują żadnego typu iteratorów, których nie są używane do manipulacji danymi.

Czym dokładnie jest kolejka priorytetowa?

Krótko mówiąc, jest to kontener, w którym przechowywaliśmy dane. Każdemu elementowi przechowywanych danych przypisujemy pewien priorytet, który może pomóc nam w ich logicznym uporządkowaniu.
Składnia:priorytet_kolejka nazwa_zmiennej

Ważne jest, aby dołączyć do programu plik nagłówkowy, aby móc korzystać z kolejki priorytetowej.

struktura oparta na słowach kluczowych w selenie

kolejka priorytetowa w c ++Na przykład, jeśli dodamy 2, 10, 30, 5, 6 w naszej kolejce priorytetów za pomocą funkcji push, a następnie zdejmiemy elementy za pomocą funkcji pop, wynik będzie wynosił 30, 10, 6, 5, 2.

OK, więc teraz znamy cel lub zastosowanie kolejki priorytetowej. Ale skąd wiedział, że 30> 10? Czy robi jakieś sortowanie? W tym momencie pojawia się Heaps. Aby dowiedzieć się więcej o stosach, zapoznaj się z tym artykułem.

Sterty - sterty są strukturami przypominającymi drzewa. Na podstawie tego, jak węzły elementów podrzędnych są rozmieszczone na stercie w stosunku do węzłów nadrzędnych, sterty są dzielone na 2 części

jeden. Min Heap W Min Heap wartość węzła nadrzędnego jest mniejsza lub równa wartości węzłów podrzędnych.

2. Max Heap W Max Heap wartość węzła nadrzędnego jest większa lub równa wartości węzłów podrzędnych.

Uwaga- Kolejka priorytetowa nie sortuje elementów za pomocą jakiegoś algorytmu sortowania, zamiast tego przechowuje dane w formie stosu.

Przechodząc do tego artykułu o kolejkach priorytetowych w języku C ++

Wydruk wszystkich elementów kolejki priorytetowej

Po zrozumieniu podstaw kolejki priorytetowej, zaimplementujmy programy, które pozwolą zrozumieć najczęściej używane metody z kolejką priorytetową

#include #include using namespace std int main () {priority_queue Prior_q Prior_q.push (10) Prior_q.push (30) Prior_q.push (6) Prior_q.push (2) Prior_q.push (15) Prior_q.push (9) Prior_q.push (7) while (Prior_q.empty () == false) {cout<< Prior_q.top() << ' ' Prior_q.pop() } return 0 }

Wynik:

30 15 10 9 6 2

W powyższym programie wykorzystaliśmy funkcje pop (), top () i push (), które są używane przez większość czasu w przypadku kolejki priorytetowej. Przyjrzyjmy się niektórym metodom, których możemy użyć w przypadku kolejki priorytetowej

rozmiar (): Ta funkcja zwraca rozmiar kolejki priorytetowej

pusty (): Ta funkcja służy do sprawdzania, czy kolejka priorytetowa jest pusta, czy nie. Zwraca prawdę, jeśli kolejka priorytetowa jest pusta.

Pchać( ): Wstawia element do kolejki priorytetowej.

Muzyka pop (): Ta funkcja usuwa najwyższy element kolejki priorytetów, czyli element o najwyższym priorytecie.

zamiana( ): Ta funkcja zamienia elementy kolejki priorytetowej z inną kolejką priorytetową. Funkcja przyjmuje kolejkę priorytetową jako parametr.

stanowisko (): Ta funkcja służy do dodawania elementu na początek kolejki priorytetowej.

Spójrzmy na jeszcze jeden program.

#include #include using namespace std int main () {priority_queue Prior_q Prior_q.push (10) Prior_q.push (30) Prior_q.push (6) Prior_q.push (2) Prior_q.push (15) Prior_q.push (9) Prior_q.push (7) while (Prior_q.empty () == false) {cout<< Prior_q.top() << ' ' Prior_q.pop() } return 0 }

Wynik:

2 6 7 9 10 15 30

Tym samym kończymy ten artykuł dotyczący kolejki priorytetów w języku C ++. Jeśli chcesz dowiedzieć się więcej, zapoznaj się z autorstwa Edureka, zaufanej firmy zajmującej się edukacją online. Szkolenie i certyfikacja J2EE i SOA firmy Edureka ma na celu przeszkolenie zarówno podstawowych, jak i zaawansowanych koncepcji języka Java, a także różnych struktur Java, takich jak Hibernate i Spring.

java sort arraylist of integers

Masz do nas pytanie? Wspomnij o tym w sekcji komentarzy na tym blogu, a skontaktujemy się z Tobą tak szybko, jak to możliwe.