C ++ priority_queue'i kasutamiseks peaks programm algama koodiga nagu:
# kaasata# kaasata
nimeruumi kasutamine std;
See sisaldab programmi järjekorrateeki.
Lugemise jätkamiseks pidanuks lugejal olema algteadmised C-st++.
Artikli sisu
- Sissejuhatus - vt eespool
- Põhiline ehitus
- Olulised liikme funktsioonid
- Muud prioriteetse järjekorra funktsioonid
- Stringandmed
- Muud prioriteetsete järjekordade ehitused
- Järeldus
Põhiline ehitus
Enne selle kasutamist tuleb andmestruktuur koostada. Ehitamine tähendab siin objekti kiirendamist raamatukogu järjekorra klassist. Järjekorraobjektil peab siis olema programmeerija antud nimi. Prioriteedijärjekorra loomiseks on kõige lihtsam süntaks:
prioriteetsusSelle süntaksiga eemaldatakse kõigepealt suurim väärtus. Instantsimise näide on:
prioriteetsusvõi
prioriteetsusVektor ja deque on C-s kaks andmestruktuuri++. Mõlemaga neist saab luua prioriteedimärgi. Vektorstruktuurist prioriteetse järjekorra loomiseks on süntaks järgmine:
prioriteetsusSelle kiirendamise näide on:
prioriteetsusPange tähele deklaratsiooni lõpus olevat lõhet> ja> vahel. Selle eesmärk on vältida segiajamist >> -ga. Vaikimisi on võrdluskood “vähem
Kui kõigepealt tuleb eemaldada vähim väärtus, peab lause olema järgmine:
prioriteetsusOlulised liikme funktsioonid
Funktsioon push ()
See funktsioon lükkab väärtuse, mis on selle argument, prioriteedimärki. See naaseb tühiseks. Järgmine kood illustreerib seda:
pq.surumine (10);
pq.surumine (30);
pq.surumine (20);
pq.surumine (50);
pq.surumine (40);
Sellele prioriteedimärgile on antud 5 täisarvu suuruses 10, 30, 20, 50, 40. Kui kõik need elemendid soovitakse prioriteetsest järjekorrast välja hüpata, tulevad need välja järjekorras 50, 40, 30, 20, 10.
Funktsioon Pop ()
See funktsioon eemaldab prioriteedi väärtusest kõrgeima prioriteediga väärtuse. Kui võrdluskood on „suurem
pq.suruma ('a'); pq.surumine ('c'); pq.surumine ('b'); pq.surumine ('e'); pq.suruma ('d');
Pange tähele, et liikmefunktsiooni kutsumiseks peab objekti nimele järgnema punkt ja seejärel funktsioon.
Ülemine funktsioon ()
The pop () funktsioon eemaldab järgmise kõrgeima prioriteediga väärtuse, kuid ei tagasta seda nagu pop () on tühine funktsioon. Kasuta üles () funktsioon, et teada saada järgmise prioriteedi kõrgeima prioriteedi väärtust. The üles () funktsioon tagastab prioriteedimärgi kõrgeima prioriteedi väärtuse koopia. Järgmine kood, kus järgmine kõrgeima prioriteediga väärtus on väikseim, illustreerib seda
pq.suruma ('a'); pq.surumine ('c'); pq.surumine ('b'); pq.surumine ('e'); pq.suruma ('d');
char ch1 = pq.ülemine (); pq.pop ();
char ch2 = pq.ülemine (); pq.pop ();
char ch3 = pq.ülemine (); pq.pop ();
char ch4 = pq.ülemine (); pq.pop ();
char ch5 = pq.ülemine (); pq.pop ();
cout<
Funktsioon tühi ()
Kui programmeerija kasutab üles () funktsioon tühjal prioriteedimärgil, pärast edukat kompileerimist, kuvatakse talle tõrketeade, näiteks:
Nii et kontrollige enne, kui kasutate alati prioriteetset järjekorda üles () funktsioon. The tühi() member function tagastab looga true, kui järjekord on tühi, ja false, kui järjekord pole tühi. Järgmine kood illustreerib seda:
prioriteetsusint i1 = 10; int i2 = 30; int i3 = 20; int i4 = 50; int i5 = 40;
pq.surumine (i1); pq.surumine (i2); pq.surumine (i3); pq.surumine (i4); pq.surumine (i5);
samas (!pq.tühi())
cout << pq.top() << ";
pq.pop ();
cout << '\n';
Muud prioriteetse järjekorra funktsioonid
Suurus () Funktsioon
See funktsioon tagastab prioriteedijärjekorra pikkuse, nagu illustreerib järgmine kood:
int i1 = 10; int i2 = 30; int i3 = 20; int i4 = 50; int i5 = 40;
pq.surumine (i1); pq.surumine (i2); pq.surumine (i3); pq.surumine (i4); pq.surumine (i5);
int len = pq.suurus ();
cout << len << '\n';
Väljund on 5.
Funktsioon swap ()
Kui kaks prioriteedimärki on sama tüüpi ja suurusega, saab selle funktsiooniga neid vahetada, nagu näitab järgmine kood:
int i1 = 10; int i2 = 30; int i3 = 20; int i4 = 50; int i5 = 40;
pq1.surumine (i1); pq1.surumine (i2); pq1.surumine (i3); pq1.surumine (i4); pq1.surumine (i5);
prioriteetsus
int it1 = 1; int it2 = 3; int it3 = 2; int it4 = 5; int it5 = 4;
pqA.suruma (it1); pqA.suruma (it2); pqA.suruma (it3); pqA.suruma (it4); pqA.suruma (it5);
pq1.vahetada (pqA);
samas (!pq1.tühi())
cout << pq1.top() << ";
pq1.pop ();
cout<<'\n';
samas (!pqA.tühi())
cout << pqA.top() << ";
pqA.pop ();
cout<<'\n';
Väljund on:
5 4 3 2 1
50 40 30 20 10
Emplace () Fuction
The asuma () funktsioon on sarnane tõukefunktsiooniga. Järgmine kood illustreerib seda:
int i1 = 10; int i2 = 30; int i3 = 20; int i4 = 50; int i5 = 40;
pq1.töökoht (i1); pq1.töökoht (i2); pq1.töökoht (i3); pq1.töökoht (i4); pq1.töökoht (i5);
samas (!pq1.tühi())
cout << pq1.top() << ";
pq1.pop ();
cout<<'\n';
Väljund on:
50 40 30 20 10
Stringandmed
Stringide võrdlemisel tuleks kasutada stringiklassi, mitte stringi literaalide otsest kasutamist, sest see võrdleks kursoreid, mitte tegelikke stringe. Järgmine kood näitab, kuidas stringiklassi kasutatakse:
# kaasataprioriteetsus
string s1 = string ("pastakas"), s2 = string ("pliiats"), s3 = string ("vihik"), s4 = string ("õpik"), s5 = string ("joonlaud");
pq1.surumine (s1); pq1.surumine (s2); pq1.surumine (s3); pq1.surumine (s4); pq1.surumine (s5);
samas (!pq1.tühi())
cout << pq1.top() << " ";
pq1.pop ();
cout<<'\n';
Väljund on:
õpikute joonlaud pliiatspliiatsi harjutusraamat
Muud prioriteetsete järjekordade ehitused
Selgesõnaline loomine vektorist
Prioriteedijärjekorra saab selgesõnaliselt luua vektorist, nagu näitab järgmine kood:
vektor
prioriteetsus
samas (!pq.tühi())
cout << pq.top() << ";
pq.pop ();
cout<<'\n';
Väljund on: 50 40 30 20 10. Seekord tuleb lisada ka vektori päis. Konstruktori funktsiooni argumendid võtavad vektori algus- ja lõppnäpud. Vektori andmetüüp ja prioriteedimärgi andmetüüp peavad olema ühesugused.
Prioriteedi kõige vähem väärtustamiseks oleks konstruktori deklaratsioon järgmine:
prioriteetsusSelgesõnaline loomine massiivist
Prioriteedijärjekorra saab luua massiivist selgesõnaliselt, nagu näitab järgmine kood:
prioriteetsus
samas (!pq.tühi())
cout << pq.top() << ";
pq.pop ();
cout<<'\n';
Väljund on: 50 40 30 20 10. Konstruktori funktsiooni argumendid võtavad massiivi algus- ja lõppnäpud. arr tagastab algkursori, “arr + 5” tagastab kursori massiivist mööda ja 5 on massiivi suurus. Massiivi andmetüüp ja prioriteedimärgi andmetüüp peavad olema samad.
Prioriteedi kõige vähem väärtustamiseks oleks konstruktori deklaratsioon järgmine:
prioriteetsusMärkus. Rakenduses C ++ nimetatakse prioriteedimärki tegelikult adapteriks, mitte ainult konteineriks.
Kohandatud võrdluskood
Kõigi prioriteedijärjekorras olevate väärtuste tõusvas või kahanevas vormis hoidmine pole prioriteedijärjekorra ainus võimalus. Näiteks maksimaalse hunniku 11 täisarvu loend on:
88, 86, 87, 84, 82, 79,74, 80, 81,, 64, 69
Suurim väärtus on 88. Sellele järgneb kaks numbrit: 86 ja 87, mis on alla 88. Ülejäänud numbrid on nendest kolmest numbrist väiksemad, kuid tegelikult mitte korras. Loendis on kaks tühja lahtrit. Numbrid 84 ja 82 on väiksemad kui 86. Numbrid 79 ja 74 on väiksemad kui 87. Numbrid 80 ja 81 on väiksemad kui 84. Numbrid 64 ja 69 on väiksemad kui 79.
Numbrite paigutus järgib maksimaalse hunniku kriteeriume - vt hiljem. Sellise skeemi pakkumiseks prioriteedimärgile peab programmeerija esitama oma võrdluskoodi - vt hiljem.
Järeldus
C ++ prioriteedijärjekord on järjekord esimesest esimesest välja. Liikme funktsioon, suruma (), lisab järjekorda uue väärtuse. Liikme funktsioon, üles (), loeb järjekorra ülemise väärtuse. Liikme funktsioon, pop (), eemaldatakse järjekorra ülemist väärtust tagastamata. Liikme funktsioon, tühi(), kontrollib, kas järjekord on tühi. Priority_queue erineb aga järjekorrast selle poolest, et järgib mõnda prioriteetset algoritmi. See võib olla suurim, esimesest viimaseni või vähemasti esimesest viimaseni. Kriteeriumid (algoritm) võib olla ka programmeerija määratletud.