For at kunne bruge C ++ -prioritet_queue skal programmet begynde med kode som:
#omfatte#omfatte
ved hjælp af namespace std;
Det inkluderer købiblioteket i programmet.
For at fortsætte med at læse, skulle læseren have haft en grundlæggende viden om C++.
Artikelindhold
- Introduktion - se ovenfor
- Grundlæggende konstruktion
- Vigtige medlemsfunktioner
- Andre prioritets køfunktioner
- Strengdata
- Andre prioritetskøkonstruktioner
- Konklusion
Grundlæggende konstruktion
Datastrukturen skal konstrueres først, før den kan bruges. Konstruktion betyder her, at du genoptager et objekt fra bibliotekets køklasse. Køobjektet skal derefter have et navn givet af programmøren. Den enkleste syntaks til oprettelse af en prioritetskø er:
prioritets-køMed denne syntaks fjernes den største værdi først. Et eksempel på instantieringen er:
prioritets-køeller
prioritets-køVektoren og deken er to datastrukturer i C++. En prioritets_kø kan oprettes med en af dem. Syntaksen for at oprette en prioritetskø fra vektorstrukturen er:
prioritets-køEt eksempel på denne instantiering er:
prioritets-køBemærk afstanden mellem> og> i slutningen af erklæringen. Dette er for at forhindre forveksling med >>. Standardsammenligningskoden er “mindre
Hvis den mindste værdi først skal fjernes, skal udsagnet være:
prioritets-køVigtige medlemsfunktioner
Push () -funktionen
Denne funktion skubber en værdi, som er dens argument, ind i prioritets_køen. Det returnerer ugyldigt. Følgende kode illustrerer dette:
pq.skub (10);
pq.skub (30);
pq.skub (20);
pq.skub (50);
pq.skub (40);
Denne prioritetskø har modtaget 5 heltal værdier i størrelsesordenen 10, 30, 20, 50, 40. Hvis alle disse elementer skal poppes ud af prioritetskøen, kommer de ud i størrelsesordenen 50, 40, 30, 20, 10.
Pop () -funktionen
Denne funktion fjerner værdien med den højeste prioritet fra prioritets_køen. Hvis sammenligningskoden er “større
pq.skub ('a'); pq.skub ('c'); pq.skub ('b'); pq.skub ('e'); pq.skub ('d');
Bemærk, at for at kalde en medlemsfunktion skal objektets navn efterfølges af en prik og derefter funktionen.
Den øverste () funktion
Det pop () funktion fjerner den næste værdi med højeste prioritet, men returnerer den ikke som pop () er en ugyldig funktion. Brug top() funktion for at kende værdien af højeste prioritet, der skal fjernes derefter. Det top() -funktionen returnerer en kopi af værdien med den højeste prioritet i prioritets_køen. Den følgende kode, hvor den næste værdi med højeste prioritet er den mindste værdi, illustrerer dette
pq.skub ('a'); pq.skub ('c'); pq.skub ('b'); pq.skub ('e'); pq.skub ('d');
char ch1 = pq.top(); pq.pop ();
char ch2 = pq.top(); pq.pop ();
char ch3 = pq.top(); pq.pop ();
char ch4 = pq.top(); pq.pop ();
char ch5 = pq.top(); pq.pop ();
cout<
Den tomme () funktion
Hvis en programmør bruger top() funktion på en tom prioritet_queue, efter den vellykkede kompilering, ville han modtage en fejlmeddelelse som:
Så kontroller altid, om prioritetskøen ikke er tom, før du bruger top() fungere. Det tom() medlemsfunktion returnerer en bool, sand, hvis køen er tom, og falsk, hvis køen ikke er tom. Følgende kode illustrerer dette:
prioritets-køint i1 = 10; int i2 = 30; int i3 = 20; int i4 = 50; int i5 = 40;
pq.skub (i1); pq.skub (i2); pq.skub (i3); pq.skub (i4); pq.skub (i5);
mens(!pq.tom())
cout << pq.top() << ";
pq.pop ();
cout << '\n';
Andre prioritets køfunktioner
Funktionen størrelse ()
Denne funktion returnerer længden af prioritetskøen, som følgende kode illustrerer:
int i1 = 10; int i2 = 30; int i3 = 20; int i4 = 50; int i5 = 40;
pq.skub (i1); pq.skub (i2); pq.skub (i3); pq.skub (i4); pq.skub (i5);
int len = pq.størrelse();
cout << len << '\n';
Outputtet er 5.
Swap-funktionen ()
Hvis to prioritetskvoter er af samme type og størrelse, kan de byttes med denne funktion, som følgende kode viser:
int i1 = 10; int i2 = 30; int i3 = 20; int i4 = 50; int i5 = 40;
pq1.skub (i1); pq1.skub (i2); pq1.skub (i3); pq1.skub (i4); pq1.skub (i5);
prioritets-kø
int it1 = 1; int it2 = 3; int it3 = 2; int it4 = 5; int it5 = 4;
pqA.skub (it1); pqA.skub (it2); pqA.skub (it3); pqA.skub (it4); pqA.skub (it5);
pq1.swap (pqA);
mens(!pq1.tom())
cout << pq1.top() << ";
pq1.pop ();
cout<<'\n';
mens(!pqA.tom())
cout << pqA.top() << ";
pqA.pop ();
cout<<'\n';
Outputtet er:
5 4 3 2 1
50 40 30 20 10
Emplace () Fuction
Det placere () funktion svarer til push-funktionen. Følgende kode illustrerer dette:
int i1 = 10; int i2 = 30; int i3 = 20; int i4 = 50; int i5 = 40;
pq1.placere (i1); pq1.placere (i2); pq1.emplace (i3); pq1.emplace (i4); pq1.emplace (i5);
mens(!pq1.tom())
cout << pq1.top() << ";
pq1.pop ();
cout<<'\n';
Outputtet er:
50 40 30 20 10
Strengdata
Når man sammenligner strenge, skal strengklassen bruges og ikke den direkte brug af strenglitteralerne, fordi den sammenligner markører og ikke de faktiske strenge. Følgende kode viser, hvordan strengklassen bruges:
#omfatteprioritets-kø
streng s1 = streng ("pen"), s2 = streng ("blyant"), s3 = streng ("træningsbog"), s4 = streng ("tekstbog"), s5 = streng ("lineal");
pq1.skub (s1); pq1.skub (s2); pq1.skub (s3); pq1.skub (s4); pq1.skub (s5);
mens(!pq1.tom())
cout << pq1.top() << " ";
pq1.pop ();
cout<<'\n';
Outputtet er:
lærebog lineal blyant pen træningsbog
Andre prioritetskøkonstruktioner
Eksplicit oprettelse af en vektor
En prioritetskø kan oprettes eksplicit fra en vektor, som følgende kode viser:
vektor
prioritets-kø
mens(!pq.tom())
cout << pq.top() << ";
pq.pop ();
cout<<'\n';
Outputtet er: 50 40 30 20 10. Denne gang skal vektoroverskriften også medtages. Argumenterne for konstruktionsfunktionen tager start- og slutpegerne på vektoren. Datatypen for vektoren og datatypen for prioritets_køen skal være den samme.
For at prioritere mindst mulig værdi er erklæringen til konstruktøren:
prioritets-køEksplicit oprettelse fra en matrix
En prioritetskø kan oprettes eksplicit fra en matrix, som følgende kode viser:
prioritets-kø
mens(!pq.tom())
cout << pq.top() << ";
pq.pop ();
cout<<'\n';
Outputtet er: 50 40 30 20 10. Argumenterne for konstruktørfunktionen tager start- og slutpegerne i arrayet. arr returnerer startmarkøren, "arr + 5" returnerer markøren lige forbi arrayet, og 5 er størrelsen på arrayet. Datatypen for arrayet og datatypen for prioritet_queue skal være den samme.
For at prioritere mindst mulig værdi er erklæringen til konstruktøren:
prioritets-køBemærk: I C ++ kaldes Priority_queue faktisk en adapter, ikke kun en container.
Brugerdefineret sammenligningskode
At have alle værdier i prioritetskøen stigende eller alle faldende er ikke den eneste mulighed for prioritetskøen. For eksempel er en liste med 11 heltal for en maksimal bunke:
88, 86, 87, 84, 82, 79,74, 80, 81,,, 64, 69
Den højeste værdi er 88. Dette efterfølges af to tal: 86 og 87, som er mindre end 88. Resten af numrene er mindre end disse tre tal, men ikke rigtig i orden. Der er to tomme celler på listen. Tallene 84 og 82 er mindre end 86. Tallene 79 og 74 er mindre end 87. Tallene 80 og 81 er mindre end 84. Tallene 64 og 69 er mindre end 79.
Placeringen af numrene følger max-heap-kriterierne - se senere. For at tilvejebringe en sådan ordning for prioritets_køen skal programmøren give sin egen sammenligningskode - se senere.
Konklusion
En C ++ -prioritetskø er en først-i-først-ud-kø. Medlemfunktionen, skubbe(), tilføjer en ny værdi til køen. Medlemfunktionen, top(), læser den øverste værdi i køen. Medlemfunktionen, pop (), fjerner uden at returnere den øverste værdi af køen. Medlemfunktionen, tom(), kontrollerer, om køen er tom. Priority_queue adskiller sig imidlertid fra køen, idet den følger en prioritetsalgoritme. Det kan være størst, fra første til sidste, eller mindst, fra første til sidste. Kriterierne (algoritme) kan også være programmørdefineret.