Norint naudoti C ++ priority_queue, programa turėtų prasidėti tokiu kodu:
# įtraukti# įtraukti
naudojant vardų sritį std;
Į programą įtraukiama eilių biblioteka.
Norėdamas toliau skaityti, skaitytojas turėjo turėti pagrindinių žinių apie C++.
Straipsnio turinys
- Įvadas - žr. Aukščiau
- Pagrindinė statyba
- Svarbios narių funkcijos
- Kitos prioritetinės eilės funkcijos
- Styginių duomenys
- Kitos prioritetinės eilės konstrukcijos
- Išvada
Pagrindinė statyba
Duomenų struktūra turi būti sukonstruota pirmiausia, kad ją būtų galima naudoti. Konstrukcija čia reiškia objekto greitinimą iš bibliotekos eilių klasės. Tada eilės objekte turi būti programuotojo suteiktas vardas. Paprasčiausia sintaksė sukurti prioritetinę eilę yra:
prioriteto_prasmėTaikant šią sintaksę, pirmiausia pašalinama didžiausia vertė. Akimirksnio pavyzdys yra:
prioriteto_spalvaarba
prioriteto_prasmėVektorius ir deque yra dvi duomenų struktūros C++. „Prior_queueue“ galima sukurti naudojant bet kurį iš jų. Sintaksė sukurti prioritetinę eilę iš vektoriaus struktūros yra:
prioriteto_spalvaŠio pavyzdžio pavyzdys yra:
prioriteto_prasmėDeklaracijos pabaigoje atkreipkite dėmesį į atotrūkį tarp> ir>. Taip siekiama išvengti painiavos su >>. Numatytasis palyginimo kodas yra „mažiau
Jei pirmiausia reikia pašalinti mažiausią vertę, sakinys turi būti:
prioriteto_prasmėSvarbios narių funkcijos
„Push“ () funkcija
Ši funkcija įstumia reikšmę, kuri yra jos argumentas, į prioriteto reikšmę. Jis grįžta negaliojantis. Tai iliustruoja šis kodas:
pq.stumti (10);
pq.stumti (30);
pq.stumti (20);
pq.stumti (50);
pq.stumti (40);
Šiam prioriteto_skilui buvo suteiktos 5 sveikųjų skaičių vertės, esančios 10, 30, 20, 50, 40 eilės tvarka. Jei visi šie elementai bus pašalinti iš prioritetinės eilės, jie pasirodys 50, 40, 30, 20, 10 tvarka.
Pop () funkcija
Ši funkcija pašalina iš prioriteto nustatymo reikšmę, turinčią didžiausią prioritetą. Jei palyginimo kodas yra „didesnis
pq.stumti ('a'); pq.stumti („c“); pq.stumti ('b'); pq.stumti ('e'); pq.stumti ('d');
Atminkite, kad norint iškviesti nario funkciją, po objekto pavadinimo turi būti taškas, o paskui - funkcija.
Viršutinė () funkcija
The pop () funkcija pašalina kitą aukščiausio prioriteto vertę, tačiau jos negrąžina, kaip pop () yra niekinė funkcija. Naudoti viršuje () funkciją, kad sužinotumėte aukščiausią prioritetą, kurį reikia pašalinti vėliau. The viršuje () funkcija grąžina aukščiausio prioriteto reikšmės prioriteto eilėje kopiją. Tai iliustruoja toliau pateiktas kodas, kuriame kita didžiausio prioriteto reikšmė yra mažiausia
pq.stumti ('a'); pq.stumti („c“); pq.stumti ('b'); pq.stumti ('e'); pq.stumti ('d');
char ch1 = pq.viršuje (); pq.popsas ();
char ch2 = pq.viršuje (); pq.popsas ();
char ch3 = pq.viršuje (); pq.popsas ();
char ch4 = pq.viršuje (); pq.popsas ();
char ch5 = pq.viršuje (); pq.popsas ();
cout<
Funkcija tuščia ()
Jei programuotojas naudoja viršuje () funkcija tuščiame prioriteto eilėje, po sėkmingo kompiliavimo, jis gaus klaidos pranešimą, pvz .:
Taigi, prieš naudodami, visada patikrinkite, ar prioritetinė eilė nėra tuščia viršuje () funkcija. The tuščia() member funkcija pateikia reikšmę true, jei eilė tuščia, ir false, jei eilė nėra tuščia. Tai iliustruoja šis kodas:
prioriteto_spalvaint i1 = 10; int i2 = 30; int i3 = 20; int i4 = 50; int i5 = 40;
pq.stumti (i1); pq.stumti (i2); pq.stumti (i3); pq.stumti (i4); pq.stumti (i5);
o (!pq.tuščia())
cout << pq.top() << ";
pq.popsas ();
cout << '\n';
Kitos prioritetinės eilės funkcijos
Funkcija dydis ()
Ši funkcija grąžina prioritetinės eilės ilgį, kaip parodo šis kodas:
int i1 = 10; int i2 = 30; int i3 = 20; int i4 = 50; int i5 = 40;
pq.stumti (i1); pq.stumti (i2); pq.stumti (i3); pq.stumti (i4); pq.stumti (i5);
int len = pq.dydis ();
cout << len << '\n';
Išvestis yra 5.
Apsikeitimo () funkcija
Jei du prioriteto žymenys yra to paties tipo ir dydžio, tada ši funkcija gali juos pakeisti, kaip rodo šis kodas:
int i1 = 10; int i2 = 30; int i3 = 20; int i4 = 50; int i5 = 40;
pq1.stumti (i1); pq1.stumti (i2); pq1.stumti (i3); pq1.stumti (i4); pq1.stumti (i5);
prioriteto_prasmė
int it1 = 1; int it2 = 3; int it3 = 2; int it4 = 5; int it5 = 4;
pqA.stumti (it1); pqA.stumti (it2); pqA.stumti (it3); pqA.stumti (it4); pqA.stumti (it5);
pq1.apsikeitimas (pqA);
o (!pq1.tuščia())
cout << pq1.top() << ";
pq1.popsas ();
cout<<'\n';
o (!pqA.tuščia())
cout << pqA.top() << ";
pqA.popsas ();
cout<<'\n';
Rezultatas yra:
5 4 3 2 1
50 40 30 20 10
„Emplace“ () „Fuction“
The vieta () funkcija yra panaši į stūmimo funkciją. Tai iliustruoja šis kodas:
int i1 = 10; int i2 = 30; int i3 = 20; int i4 = 50; int i5 = 40;
pq1.vieta (i1); pq1.vieta (i2); pq1.emplace (i3); pq1.vieta (i4); pq1.emplace (i5);
o (!pq1.tuščia())
cout << pq1.top() << ";
pq1.popsas ();
cout<<'\n';
Rezultatas yra:
50 40 30 20 10
Styginių duomenys
Lyginant eilutes, reikia naudoti eilutės klasę, o ne tiesiogiai naudoti eilutės literalus, nes ji palygintų rodykles, o ne tikras eilutes. Šis kodas rodo, kaip naudojama eilutės klasė:
# įtrauktiprioriteto_prasmė
eilutė s1 = eilutė ("rašiklis"), s2 = virvelė ("pieštukas"), s3 = eilutė ("pratybų sąsiuvinis"), s4 = eilutė ("vadovėlis"), s5 = eilutė ("valdovas");
pq1.stumti (s1); pq1.stumti (s2); pq1.stumti (s3); pq1.stumti (s4); pq1.stumti (s5);
o (!pq1.tuščia())
cout << pq1.top() << " ";
pq1.popsas ();
cout<<'\n';
Rezultatas yra:
vadovėlių pieštuko tušinuko pratybų sąsiuvinis
Kitos prioritetinės eilės konstrukcijos
Aiškus kūrimas iš vektoriaus
Prioritetinę eilę galima sukurti aiškiai iš vektoriaus, kaip rodo šis kodas:
vektorius
prioriteto_spalva
o (!pq.tuščia())
cout << pq.top() << ";
pq.popsas ();
cout<<'\n';
Išvestis yra: 50 40 30 20 10. Šį kartą taip pat reikia įtraukti vektoriaus antraštę. Konstruktoriaus funkcijos argumentai apima vektoriaus pradžios ir pabaigos rodykles. Vektoriaus duomenų tipas ir prioriteto eilės duomenų tipas turi būti vienodi.
Norint kuo mažiau įvertinti prioritetą, konstruktoriaus deklaracija būtų:
prioriteto_prasmėAiškus kūrinys iš masyvo
Pirmenybės eilę galima sukurti iš masyvo, kaip rodo šis kodas:
prioriteto_prasmė
o (!pq.tuščia())
cout << pq.top() << ";
pq.popsas ();
cout<<'\n';
Išvestis yra: 50 40 30 20 10. Konstruktoriaus funkcijos argumentai pateikia masyvo pradžios ir pabaigos rodykles. arr grąžina pradinį rodyklę, „arr + 5“ grąžina rodyklę tik už masyvo, o 5 yra masyvo dydis. Masyvo duomenų tipas ir prioriteto eilės duomenų tipas turi būti vienodi.
Norint kuo mažiau įvertinti prioritetą, konstruktoriaus deklaracija būtų:
prioriteto_prasmėPastaba: C ++ versijoje prioriteto_kodas yra vadinamas adapteriu, o ne tik konteineriu.
Pasirinktinis palyginimo kodas
Visų prioritetinėje eilėje esančių reikšmių didėjimas ar mažėjimas nėra vienintelis prioritetinės eilės variantas. Pvz., 11 sveikų skaičių, nurodančių maksimalų kaupą, sąrašas:
88, 86, 87, 84, 82, 79,74, 80, 81,, 64, 69
Didžiausia vertė yra 88. Po to seka du skaičiai: 86 ir 87, kurie yra mažiau nei 88. Likę skaičiai yra mažesni už šiuos tris skaičius, bet iš tikrųjų nėra tvarkingi. Sąraše yra dvi tuščios langelės. Skaičiai 84 ir 82 yra mažesni nei 86. Skaičiai 79 ir 74 yra mažesni nei 87. Skaičiai 80 ir 81 yra mažesni nei 84. Skaičiai 64 ir 69 yra mažesni nei 79.
Skaičių išdėstymas atitinka maksimalaus kriterijaus kriterijus - žr. Vėliau. Norėdamas pateikti tokią „prioriteto_markės“ schemą, programuotojas turi pateikti savo palyginimo kodą - žr. Vėliau.
Išvada
„C ++ priority_queue“ yra eilė „pirmas į pirmą“. Nario funkcija, stumti (), prideda naują vertę eilėje. Nario funkcija, viršuje (), nuskaito didžiausią eilės vertę. Nario funkcija, pop (), pašalina negrąžinant viršutinės eilės vertės. Nario funkcija, tuščia(), patikrina, ar eilė tuščia. Tačiau prioriteto eilė skiriasi nuo eilės, nes ji vadovaujasi tam tikru prioriteto algoritmu. Tai gali būti didžiausia, nuo pirmo iki paskutinio, arba mažiausiai, nuo pirmo iki paskutinio. Kriterijus (algoritmą) taip pat galima apibrėžti programuotoju.