Hoe een prioriteitswachtrij te implementeren in C ++



Dit artikel biedt u gedetailleerde en uitgebreide kennis over het implementeren van een prioriteitswachtrij in C ++ met voorbeelden.

Een prioriteitswachtrij is een container in de STL. Het is vergelijkbaar met de wachtrij, behalve dat elk element van de prioriteitswachtrij een bepaalde prioriteit heeft en wanneer we elementen uit de prioriteitswachtrij halen, worden de elementen met de hoogste prioriteit als eerste gepopt. Net als de prioriteitswachtrij zijn er 10 verschillende soorten containers in STL . Een container is een object waarin gegevens worden opgeslagen. De STL-containers worden geïmplementeerd met behulp van sjabloonklassen, waardoor het eenvoudig is om het aan te passen om verschillende soorten gegevens te bevatten. In dit bericht zullen we de prioriteitswachtrij en daarmee verband houdende concepten in detail bespreken. De volgende punten worden behandeld in deze Priority Queue in C ++ artikel,

Verderop met dit artikel over Priority Queue in C ++





Onderdelen van STL

STL bestaat uit sjabloonklassen en functies die kunnen worden gebruikt als een standaardbenadering voor het opslaan en verwerken van gegevens. Laten we de componenten van de STL bespreken

Containers Er zijn 10 soorten containers gedefinieerd in STL en deze zijn gegroepeerd in 3 categorieën. Van deze drie behoren prioriteitswachtrijen tot de categorie van de afgeleide container. Elke containerklasse heeft zijn eigen set functies die kunnen worden gebruikt om de gegevens te manipuleren.



Algoritme - Een algoritme is een methode die wordt gebruikt om de gegevens in het containerobject te verwerken. STL biedt veel verschillende soorten algoritmen die kunnen worden gebruikt bij het initialiseren, zoeken, sorteren, samenvoegen en kopiëren. Algoritmen worden geïmplementeerd met behulp van sjabloonfuncties.

Iterator- Een iterator is een object dat naar een element in de container wijst. Iterators kunnen helpen bij het verplaatsen door de inhoud van een container. Iteratoren zijn als wijzers die kunnen worden verhoogd en verlaagd. Het fungeert als een link tussen het algoritme en de container. Iteratoren worden gebruikt voor het manipuleren van de gegevens die in een container zijn opgeslagen.

Verderop met dit artikel over Priority Queue in C ++



Enorm veel en prioriteitswachtrij

Zoals we eerder zagen, behoort Priority Queue tot de categorie van afgeleide containers. Andere leden van deze categorie zijn stapel en wachtrij. Deze afgeleide containers worden ook wel containeradapters genoemd.

Stapel-, wachtrij- en prioriteitswachtrij staan ​​bekend als afgeleide containers omdat ze zijn gemaakt van containers met verschillende volgorde. Deze containers ondersteunen geen enkel type iterator, ze worden niet gebruikt voor gegevensmanipulatie.

Wat is precies een prioriteitswachtrij?

In eenvoudige bewoordingen is het een container waarin we gegevens opslaan. Elk element van de opgeslagen gegevens krijgt een bepaalde prioriteit die ons kan helpen bij het opslaan van gegevens in een logische volgorde.
Syntaxis:prioriteit_wachtrij variabele_naam

Het is belangrijk om een ​​header-bestand in het programma op te nemen om een ​​prioriteitswachtrij te gebruiken.

prioriteitswachtrij in c ++Als we bijvoorbeeld 2, 10, 30, 5, 6 aan onze prioriteitswachtrij toevoegen met behulp van de push-functie en vervolgens de elementen poppen met de pop-functie, is de uitvoer 30, 10, 6, 5, 2.

Oké, dus nu weten we het doel of het gebruik van de prioriteitswachtrij. Maar hoe wist het of 30> 10? Is het aan het sorteren? Op dit punt komen Heaps in beeld. Raadpleeg dit artikel voor meer informatie over hopen.

Heaps- Heaps zijn boomachtige structuren. Op basis van hoe de knooppunten van de onderliggende elementen in een hoop zijn gerangschikt ten opzichte van de bovenliggende knooppunten, worden hopen onderverdeeld in 2 delen

een. Min. Hoop In Min Heap is de waarde van het bovenliggende knooppunt kleiner dan of gelijk aan de waarde van de onderliggende knooppunten.

2. Max. Hoop In Max Heap is de waarde van het bovenliggende knooppunt groter dan of gelijk aan de waarde van de onderliggende knooppunten.

Opmerking- De prioriteitswachtrij sorteert de elementen niet met behulp van een of ander sorteeralgoritme, maar slaat de gegevens op in de vorm van een hoop.

Verderop met dit artikel over Priority Queue in C ++

Alle elementen van een prioriteitswachtrij afdrukken

Nadat we de basisprincipes van de prioriteitswachtrij hebben begrepen, gaan we programma's implementeren om de meest gebruikte methoden met een prioriteitswachtrij te begrijpen

#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 }

Uitgang:

30 15 10 9 6 2

In het bovenstaande programma hebben we de functies pop (), top () en push () gebruikt die meestal worden gebruikt bij het omgaan met een prioriteitswachtrij. Laten we eens kijken naar enkele van de methoden die we kunnen gebruiken met een prioriteitswachtrij

maat (): Deze functie geeft als resultaat de grootte van de prioriteitswachtrij

leeg (): Deze functie wordt gebruikt om te controleren of de prioriteitswachtrij leeg is of niet. Het geeft true terug als de prioriteitswachtrij leeg is.

Duwen( ): Voegt een element in de prioriteitswachtrij in.

pop (): Deze functie verwijdert het bovenste element van de prioriteitswachtrij, het element met de hoogste prioriteit.

swap (): Deze functie verwisselt de elementen van de prioriteitswachtrij met een andere prioriteitswachtrij. De functie heeft een prioriteitswachtrij als parameter.

emplace (): Deze functie wordt gebruikt om een ​​element toe te voegen aan de top van de prioriteitswachtrij.

Laten we nog een programma bekijken.

#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 }

Uitgang:

2 6 7 9 10 15 30

Hiermee komen we aan het einde van dit Priority Queue in C ++ -artikel. Als je meer wilt weten, bekijk dan de door Edureka, een vertrouwd online leerbedrijf. Edureka's Java J2EE- en SOA-trainings- en certificeringscursus is ontworpen om u te trainen in zowel kern- als geavanceerde Java-concepten, samen met verschillende Java-frameworks zoals Hibernate & Spring.

system.exit (1) java

Heeft u een vraag voor ons? Vermeld het in het opmerkingengedeelte van deze blog en we nemen zo snel mogelijk contact met je op.