Da bi se koristio C ++ priority_queue, program treba započeti s kodom poput:
#include#include
pomoću prostora imena std;
Uključuje biblioteku redova u program.
Da bi nastavio čitati, čitatelj je trebao imati osnovno znanje o C++.
Sadržaj članka
- Uvod - vidi gore
- Osnovna konstrukcija
- Važne funkcije člana
- Ostale funkcije prioritetnog reda
- Podaci o nizu
- Ostale konstrukcije prioritetnog reda
- Zaključak
Osnovna konstrukcija
Struktura podataka mora se prvo konstruirati prije nego što se može koristiti. Konstrukcija ovdje znači instanciranje objekta iz klase reda knjižnice. Objekt reda mora tada imati ime koje mu je dao programer. Najjednostavnija sintaksa za stvaranje prioriteta reda je:
prioritet_redaOvom sintaksom prvo se uklanja najveća vrijednost. Primjer instancije je:
prioritet_redaili
prioritet_redaVektor i deque su dvije strukture podataka u C++. Red za prioritet_ može se stvoriti s bilo kojim od njih. Sintaksa za stvaranje reda prioriteta iz vektorske strukture je:
prioritet_redaPrimjer ove instancije je:
prioritet_redaPrimijetite jaz između> i> na kraju deklaracije. Ovo je kako bi se spriječila zabuna s >>. Zadani kod za usporedbu je „manje
Ako se prvo želi ukloniti najmanja vrijednost, tada izjava mora biti:
prioritet_redaVažne funkcije člana
Funkcija push ()
Ova funkcija gura vrijednost, koja je njezin argument, u prioritet_reda. Vraća se praznim. Sljedeći kod to ilustrira:
pq.guranje (10);
pq.guranje (30);
pq.guranje (20);
pq.guranje (50);
pq.guranje (40);
Ovaj je prioritet_reda primio 5 cijelih vrijednosti redoslijedom 10, 30, 20, 50, 40. Ako će se svi ti elementi iskočiti iz reda prioriteta, tada će se pojaviti redoslijedom 50, 40, 30, 20, 10.
Funkcija pop ()
Ova funkcija uklanja iz prioriteta_vrsta vrijednost s najvišim prioritetom. Ako je kod za usporedbu „veći
pq.push ('a'); pq.push ('c'); pq.push ('b'); pq.push ('e'); pq.push ('d');
Imajte na umu da da bi se pozvala funkcija člana, iza imena objekta mora slijediti točka, a zatim funkcija.
Vrh () funkcija
The pop () funkcija uklanja sljedeću vrijednost najvišeg prioriteta, ali je ne vraća, kao pop () je void funkcija. Koristiti vrh() funkcija kako bi se znala vrijednost najvišeg prioriteta koja se sljedeća mora ukloniti. The vrh() funkcija vraća kopiju vrijednosti najvišeg prioriteta u priority_queue. Sljedeći kod, gdje je sljedeća vrijednost najvišeg prioriteta najmanja vrijednost, to ilustrira
pq.push ('a'); pq.push ('c'); pq.push ('b'); pq.push ('e'); pq.push ('d');
char ch1 = pq.vrh(); pq.pop ();
char ch2 = pq.vrh(); pq.pop ();
char ch3 = pq.vrh(); pq.pop ();
char ch4 = pq.vrh(); pq.pop ();
char ch5 = pq.vrh(); pq.pop ();
cout<
Funkcija empty ()
Ako programer koristi vrh() funkcije na praznom prioritetnom_redu, nakon uspješne kompilacije, primit će poruku o pogrešci kao što je:
Dakle, uvijek provjerite nije li redoslijed prioriteta prazan prije upotrebe vrh() funkcija. The prazan() funkcija member vraća bool, true, ako je red prazan, i false ako red nije prazan. Sljedeći kod to ilustrira:
prioritet_redaint i1 = 10; int i2 = 30; int i3 = 20; int i4 = 50; int i5 = 40;
pq.guranje (i1); pq.guranje (i2); pq.guranje (i3); pq.guranje (i4); pq.guranje (i5);
dok(!pq.prazan())
cout << pq.top() << ";
pq.pop ();
cout << '\n';
Ostale funkcije prioritetnog reda
Veličina () Funkcija
Ova funkcija vraća duljinu reda prioriteta, kao što slijedi kôd:
int i1 = 10; int i2 = 30; int i3 = 20; int i4 = 50; int i5 = 40;
pq.guranje (i1); pq.guranje (i2); pq.guranje (i3); pq.guranje (i4); pq.guranje (i5);
int len = pq.veličina();
cout << len << '\n';
Izlaz je 5.
Funkcija zamjene ()
Ako su dva prioriteta_vrsta iste vrste i veličine, tada ih ova funkcija može zamijeniti, kao što pokazuje sljedeći kod:
int i1 = 10; int i2 = 30; int i3 = 20; int i4 = 50; int i5 = 40;
pq1.guranje (i1); pq1.guranje (i2); pq1.guranje (i3); pq1.guranje (i4); pq1.guranje (i5);
prioritet_reda
int it1 = 1; int it2 = 3; int it3 = 2; int it4 = 5; int it5 = 4;
pqA.pritisnuti (it1); pqA.gurnuti (it2); pqA.gurnuti (it3); pqA.guranje (it4); pqA.guranje (it5);
pq1.zamjena (pqA);
dok(!pq1.prazan())
cout << pq1.top() << ";
pq1.pop ();
cout<<'\n';
dok(!pqA.prazan())
cout << pqA.top() << ";
pqA.pop ();
cout<<'\n';
Izlaz je:
5 4 3 2 1
50 40 30 20 10
Mjesto () Fukcija
The staviti na položaj() funkcija slična je funkciji potiskivanja. Sljedeći kod to ilustrira:
int i1 = 10; int i2 = 30; int i3 = 20; int i4 = 50; int i5 = 40;
pq1.emplace (i1); pq1.mjesto (i2); pq1.emplace (i3); pq1.mjesto (i4); pq1.mjesto (i5);
dok(!pq1.prazan())
cout << pq1.top() << ";
pq1.pop ();
cout<<'\n';
Izlaz je:
50 40 30 20 10
Podaci o nizu
Kada se uspoređuju nizovi, trebala bi se koristiti klasa stringa, a ne izravna upotreba literalnih nizova, jer bi se uspoređivali pokazivači, a ne stvarni nizovi. Sljedeći kod pokazuje kako se koristi klasa stringa:
#includeprioritet_reda
niz s1 = niz ("olovka"), s2 = niz ("olovka"), s3 = niz ("vježbenica"), s4 = niz ("udžbenik"), s5 = niz ("ravnalo");
pq1.guranje (s1); pq1.potisak (s2); pq1.guranje (s3); pq1.guranje (s4); pq1.guranje (s5);
dok(!pq1.prazan())
cout << pq1.top() << " ";
pq1.pop ();
cout<<'\n';
Izlaz je:
udžbenik vladar olovka olovka vježbenica
Ostale konstrukcije prioritetnog reda
Eksplicitno stvaranje iz vektora
Prioritetni red može se izričito stvoriti iz vektora kao što pokazuje sljedeći kod:
vektor
prioritet_reda
dok(!pq.prazan())
cout << pq.top() << ";
pq.pop ();
cout<<'\n';
Izlaz je: 50 40 30 20 10. Ovaj put mora biti uključeno i zaglavlje vektora. Argumenti za konstruktorsku funkciju uzimaju početni i krajnji pokazivač vektora. Vrsta podataka za vektor i vrsta podataka za prioritet_reda moraju biti iste.
Da bi se najmanja vrijednost imala kao prioritet, deklaracija za konstruktor bi bila:
prioritet_redaEksplicitna kreacija iz niza
Prioritetni red može se izričito stvoriti iz niza kao što pokazuje sljedeći kod:
prioritet_reda
dok(!pq.prazan())
cout << pq.top() << ";
pq.pop ();
cout<<'\n';
Izlaz je: 50 40 30 20 10. Argumenti za konstruktorsku funkciju uzimaju početni i krajnji pokazivač niza. arr vraća početni pokazivač, “arr + 5” vraća pokazivač tik iza polja, a 5 je veličina polja. Tip podataka za niz i tip podataka za prioritet_reda moraju biti jednaki.
Da bi se najmanja vrijednost imala kao prioritet, deklaracija za konstruktor bi bila:
prioritet_redaNapomena: U C ++-u prioritetni_red se zapravo naziva adapter, a ne samo spremnik.
Prilagođeni usporedni kod
Imati sve vrijednosti u prioritetnom redu uzlazno ili sve silazno nije jedina opcija za prioritetni red. Na primjer, popis od 11 cijelih brojeva za maksimalnu hrpu je:
88, 86, 87, 84, 82, 79,74, 80, 81,,, 64, 69
Najviša vrijednost je 88. Nakon toga slijede dva broja: 86 i 87, koji su manji od 88. Ostatak brojeva je manji od ova tri broja, ali zapravo nije redom. Na popisu su dvije prazne ćelije. Brojevi 84 i 82 manji su od 86. Brojevi 79 i 74 manji su od 87. Brojevi 80 i 81 manji su od 84. Brojevi 64 i 69 manji su od 79.
Raspored brojeva slijedi kriterije maks. Hrpe - pogledajte kasnije. Da bi pružio takvu shemu za prioritet_reda, programer mora osigurati vlastiti kôd za usporedbu - vidi kasnije.
Zaključak
C ++ priority_queue je prvi u prvom redu izlaz. Funkcija člana, gurnuti(), dodaje novu vrijednost u red čekanja. Funkcija člana, vrh(), čita najvišu vrijednost u redu. Funkcija člana, pop (), uklanja bez vraćanja najveće vrijednosti reda. Funkcija člana, prazan(), provjerava je li red prazan. Međutim, prioritet_reda razlikuje se od reda čekanja, slijedeći neki algoritam prioriteta. Može biti najveći, od prvog do posljednjeg, ili najmanje, od prvog do posljednjeg. Kriteriji (algoritam) se također mogu definirati programerima.