For å kunne bruke C ++ -prioritet_queue, bør programmet begynne med kode som:
#inkludere#inkludere
bruker navneområde std;
Den inkluderer købiblioteket i programmet.
For å kunne fortsette å lese, skulle leseren ha hatt en grunnleggende kunnskap om C++.
Artikkelinnhold
- Innledning - se ovenfor
- Grunnleggende konstruksjon
- Viktige medlemsfunksjoner
- Andre prioriterte køfunksjoner
- Strengdata
- Andre prioritetskøkonstruksjoner
- Konklusjon
Grunnleggende konstruksjon
Datastrukturen må først konstrueres før den kan brukes. Konstruksjon her betyr å sette i gang et objekt fra køklassen i biblioteket. Køobjektet må da ha et navn gitt av programmereren. Den enkleste syntaksen for å opprette en prioritetskø er:
prioritets_kjøpMed denne syntaksen fjernes den største verdien først. Et eksempel på instantiering er:
prioritets_kjøpeller
prioritets_kjøpVektoren og deken er to datastrukturer i C++. Det kan opprettes en prioritets_kø med hver av dem. Syntaksen for å opprette en prioritert kø fra vektorstrukturen er:
prioritets_kjøpEt eksempel på denne instantiasjonen er:
prioritets_kjøpLegg merke til gapet mellom> og> på slutten av erklæringen. Dette er for å forhindre forvirring med >>. Standard sammenligningskoden er “mindre
Hvis den minste verdien først skal fjernes, må uttalelsen være:
prioritets_kjøpViktige medlemsfunksjoner
Trykk () -funksjonen
Denne funksjonen skyver en verdi, som er dens argument, inn i prioritets_køen. Den returnerer ugyldig. Følgende kode illustrerer dette:
pq.trykk (10);
pq.trykk (30);
pq.trykk (20);
pq.trykk (50);
pq.trykk (40);
Denne prioritetskøen har mottatt 5 heltallverdier i størrelsesorden 10, 30, 20, 50, 40. Hvis alle disse elementene skal poppes ut av prioritetskøen, vil de komme ut i størrelsesorden 50, 40, 30, 20, 10.
Pop () -funksjonen
Denne funksjonen fjerner verdien med høyeste prioritet fra prioritet_køen. Hvis sammenligningskoden er “større
pq.skyv ('a'); pq.trykk ('c'); pq.skyv ('b'); pq.skyv ('e'); pq.skyv ('d');
Merk at for å ringe til en medlemsfunksjon, må navnet på objektet følges av en prikk, og deretter funksjonen.
Toppen () -funksjonen
De pop () funksjonen fjerner neste verdi med høyeste prioritet, men returnerer den ikke, som pop () er en tom funksjon. Bruke topp() funksjon for å vite verdien av høyeste prioritet som må fjernes neste gang. De topp() funksjonen returnerer en kopi av verdien av høyeste prioritet i prioritet_køen. Følgende kode, der neste verdi med høyeste prioritet er minst verdi, illustrerer dette
pq.skyv ('a'); pq.trykk ('c'); pq.skyv ('b'); pq.skyv ('e'); pq.skyv ('d');
char ch1 = pq.topp(); pq.pop ();
char ch2 = pq.topp(); pq.pop ();
char ch3 = pq.topp(); pq.pop ();
char ch4 = pq.topp(); pq.pop ();
char ch5 = pq.topp(); pq.pop ();
cout<
Den tomme () funksjonen
Hvis en programmerer bruker topp() funksjon på en tom prioritet_queue, etter vellykket kompilering, ville han motta en feilmelding som:
Så sjekk alltid om prioritetskøen ikke er tom før du bruker topp() funksjon. De tømme() medlemsfunksjon returnerer en bool, sant, hvis køen er tom, og falsk hvis køen ikke er tom. Følgende kode illustrerer dette:
prioritets_kjøpint i1 = 10; int i2 = 30; int i3 = 20; int i4 = 50; int i5 = 40;
pq.trykk (i1); pq.trykk (i2); pq.trykk (i3); pq.trykk (i4); pq.trykk (i5);
samtidig som(!pq.tømme())
cout << pq.top() << ";
pq.pop ();
cout << '\n';
Andre prioriterte køfunksjoner
Størrelsen () Funksjon
Denne funksjonen returnerer lengden på prioritetskøen, som følgende kode illustrerer:
int i1 = 10; int i2 = 30; int i3 = 20; int i4 = 50; int i5 = 40;
pq.trykk (i1); pq.trykk (i2); pq.trykk (i3); pq.trykk (i4); pq.trykk (i5);
int len = pq.størrelse();
cout << len << '\n';
Utgangen er 5.
Bytt () -funksjonen
Hvis to prioritetskvoter er av samme type og størrelse, kan de byttes med denne funksjonen, som følgende kode viser:
int i1 = 10; int i2 = 30; int i3 = 20; int i4 = 50; int i5 = 40;
pq1.trykk (i1); pq1.trykk (i2); pq1.trykk (i3); pq1.trykk (i4); pq1.trykk (i5);
prioritets_kjøp
int it1 = 1; int it2 = 3; int it3 = 2; int it4 = 5; int it5 = 4;
pqA.trykk (it1); pqA.trykk (it2); pqA.trykk (it3); pqA.trykk (it4); pqA.trykk (it5);
pq1.bytte (pqA);
samtidig som(!pq1.tømme())
cout << pq1.top() << ";
pq1.pop ();
cout<<'\n';
samtidig som(!pqA.tømme())
cout << pqA.top() << ";
pqA.pop ();
cout<<'\n';
Utgangen er:
5 4 3 2 1
50 40 30 20 10
The emplace () Fuction
De emplace () funksjonen ligner på trykkfunksjonen. Følgende kode illustrerer dette:
int i1 = 10; int i2 = 30; int i3 = 20; int i4 = 50; int i5 = 40;
pq1.emplace (i1); pq1.emplace (i2); pq1.emplace (i3); pq1.emplace (i4); pq1.emplace (i5);
samtidig som(!pq1.tømme())
cout << pq1.top() << ";
pq1.pop ();
cout<<'\n';
Utgangen er:
50 40 30 20 10
Strengdata
Når du sammenligner strenger, bør strengklassen brukes og ikke direkte bruk av strenglitteralene fordi den sammenligner pekere og ikke de faktiske strengene. Følgende kode viser hvordan strengklassen brukes:
#inkludereprioritets_kjøp
streng s1 = streng ("penn"), s2 = streng ("blyant"), s3 = streng ("øvelsesbok"), s4 = streng ("tekstbok"), s5 = streng ("linjal");
pq1.trykk (s1); pq1.trykk (s2); pq1.trykk (s3); pq1.trykk (s4); pq1.trykk (s5);
samtidig som(!pq1.tømme())
cout << pq1.top() << " ";
pq1.pop ();
cout<<'\n';
Utgangen er:
tekstbok linjal blyantpenn øvelsesbok
Andre prioritetskøkonstruksjoner
Eksplisitt oppretting fra en vektor
En prioritetskø kan opprettes eksplisitt fra en vektor som følgende kode viser:
vektor
prioritets_kjøp
samtidig som(!pq.tømme())
cout << pq.top() << ";
pq.pop ();
cout<<'\n';
Utgangen er: 50 40 30 20 10. Denne gangen må også vektoroverskriften inkluderes. Argumentene for konstruktorfunksjonen tar start- og sluttpekerne til vektoren. Datatypen for vektoren og datatypen for prioritets_køen må være den samme.
For å prioritere minst mulig, vil erklæringen for konstruktøren være:
prioritets_kjøpEksplisitt skapelse fra en matrise
En prioritetskø kan opprettes eksplisitt fra en matrise som følgende kode viser:
prioritets_kjøp
samtidig som(!pq.tømme())
cout << pq.top() << ";
pq.pop ();
cout<<'\n';
Utgangen er: 50 40 30 20 10. Argumentene for konstruktorfunksjonen tar start- og sluttpekerne til matrisen. arr returnerer startpekeren, "arr + 5" returnerer pekeren like forbi matrisen, og 5 er størrelsen på matrisen. Datatypen for matrisen og datatypen for prioritets_køen må være den samme.
For å prioritere minst mulig, vil erklæringen for konstruktøren være:
prioritets_kjøpMerk: I C ++ kalles Priority_queue faktisk en adapter, ikke bare en container.
Tilpasset sammenligningskode
Å ha alle verdiene i prioritetskøen stigende eller alt synkende er ikke det eneste alternativet for prioritetskøen. For eksempel er en liste over 11 heltall for en maksimal bunke:
88, 86, 87, 84, 82, 79,74, 80, 81,,, 64, 69
Den høyeste verdien er 88. Dette etterfølges av to tall: 86 og 87, som er mindre enn 88. Resten av tallene er mindre enn disse tre tallene, men egentlig ikke i orden. Det er to tomme celler i listen. Tallene 84 og 82 er mindre enn 86. Tallene 79 og 74 er mindre enn 87. Tallene 80 og 81 er mindre enn 84. Tallene 64 og 69 er mindre enn 79.
Plasseringen av tallene følger maks-heap-kriteriene - se senere. For å kunne tilby et slikt oppsett for prioritets_kø, må programmereren oppgi sin egen sammenligningskode - se senere.
Konklusjon
En C ++ -prioritetskø er en først-inn-først-ut-kø. Medlemsfunksjonen, trykk(), legger til en ny verdi i køen. Medlemsfunksjonen, topp(), leser toppverdien i køen. Medlemsfunksjonen, pop (), fjerner uten å returnere toppverdien til køen. Medlemsfunksjonen, tømme(), sjekker om køen er tom. Priority_queue skiller seg imidlertid fra køen, ved at den følger en prioritetsalgoritme. Det kan være størst, fra første til siste, eller minst, fra første til siste. Kriteriene (algoritmen) kan også defineres som programmerer.