Lai izmantotu C ++ priority_queue, programmai jāsākas ar kodu, piemēram:
# iekļaut# iekļaut
izmantojot nosaukumvietu std;
Tas programmā iekļauj rindu bibliotēku.
Lai turpinātu lasīt, lasītājam bija jābūt pamatzināšanām par C++.
Raksta saturs
- Ievads - skatīt iepriekš
- Pamata konstrukcija
- Svarīgas locekļa funkcijas
- Citas prioritārās rindas funkcijas
- Stīgu dati
- Citas prioritārās rindas konstrukcijas
- Secinājums
Pamata konstrukcija
Pirms to var izmantot, vispirms jākonstruē datu struktūra. Konstrukcija šeit nozīmē objekta iegūšanu no bibliotēkas rindas klases. Pēc tam rindas objektam jābūt nosaukumam, ko tam piešķīris programmētājs. Vienkāršākā sintakse prioritārās rindas izveidošanai ir:
prioritātes_mērķisIzmantojot šo sintaksi, vispirms tiek noņemta lielākā vērtība. Instantācijas piemērs ir:
prioritātes_mērķisvai
prioritātes_mērķisVektors un deque ir divas datu struktūras C++. Prioritātes_rindu var izveidot ar kādu no tiem. Sintakse, lai izveidotu prioritāru rindu no vektoru struktūras, ir šāda:
prioritātes_mērķisŠīs piemērs ir:
prioritātes_mērķisDeklarācijas beigās ievērojiet plaisu starp> un>. Tas ir paredzēts, lai novērstu sajaukšanu ar >>. Noklusējuma salīdzināšanas kods ir “mazāk
Ja vispirms ir jānoņem vismazākā vērtība, paziņojumam jābūt:
prioritātes_mērķisSvarīgas locekļa funkcijas
Funkcija push ()
Šī funkcija iestumj vērtību, kas ir tās arguments, prioritāšu_rindā. Tas atgriežas anulēts. Šis kods ilustrē to:
pq.grūdiens (10);
pq.grūdiens (30);
pq.grūdiens (20);
pq.grūdiens (50);
pq.grūdiens (40);
Šī prioritārā_rindiņa ir saņēmusi 5 veselu skaitļu vērtības secībā 10, 30, 20, 50, 40. Ja visus šos elementus paredzēts izlaist no prioritārās rindas, tie iznāks 50, 40, 30, 20, 10 secībā.
Funkcija Pop ()
Šī funkcija no prioritātes_klases noņem vērtību ar visaugstāko prioritāti. Ja salīdzināšanas kods ir “lielāks
pq.grūdiens ('a'); pq.grūdiens ('c'); pq.grūdiens ('b'); pq.grūdiens ('e'); pq.grūdiens ('d');
Ņemiet vērā, ka, lai izsauktu dalībnieka funkciju, objekta nosaukumam jāseko punktam un pēc tam funkcijai.
Augšējā () funkcija
The pop () funkcija noņem nākamo augstākās prioritātes vērtību, bet to neatgriež, kā pop () ir tukšuma funkcija. Izmantojiet tops() funkciju, lai uzzinātu augstākās prioritātes vērtību, kas jānoņem pēc tam. The tops() funkcija atgriež prioritātes vērtības augstākās prioritātes vērtības kopiju. To ilustrē šāds kods, kur nākamā augstākās prioritātes vērtība ir mazākā
pq.grūdiens ('a'); pq.grūdiens ('c'); pq.grūdiens ('b'); pq.grūdiens ('e'); pq.grūdiens ('d');
char ch1 = pq.tops(); pq.pops ();
char ch2 = pq.tops(); pq.pops ();
char ch3 = pq.tops(); pq.pops ();
char ch4 = pq.tops(); pq.pops ();
char ch5 = pq.tops(); pq.pops ();
cout<
Tukšā () funkcija
Ja programmētājs izmanto tops() Funkcija tukšā prioritātes_rindā pēc veiksmīgas apkopošanas viņš saņems tādu kļūdas ziņojumu kā:
Tātad, pirms lietojat, vienmēr pārbaudiet, vai prioritārā rinda nav tukša tops() funkciju. The tukšs () member funkcija atgriež bool vērtību true, ja rinda ir tukša, un false, ja rinda nav tukša. Šis kods ilustrē to:
prioritātes_mērķisint i1 = 10; int i2 = 30; int i3 = 20; int i4 = 50; int i5 = 40;
pq.grūdiens (i1); pq.grūdiens (i2); pq.grūdiens (i3); pq.grūdiens (i4); pq.grūdiens (i5);
kamēr (!pq.tukšs ())
cout << pq.top() << ";
pq.pops ();
cout << '\n';
Citas prioritārās rindas funkcijas
Izmērs () Funkcija
Šī funkcija atgriež prioritārās rindas garumu, kā parāda šāds kods:
int i1 = 10; int i2 = 30; int i3 = 20; int i4 = 50; int i5 = 40;
pq.grūdiens (i1); pq.grūdiens (i2); pq.grūdiens (i3); pq.grūdiens (i4); pq.grūdiens (i5);
int len = pq.Izmērs();
cout << len << '\n';
Rezultāts ir 5.
Mijmaiņas () funkcija
Ja divām prioritārajām rindiņām ir tāda paša veida un lieluma, tad ar šo funkciju tās var apmainīt, kā parāda šāds kods:
int i1 = 10; int i2 = 30; int i3 = 20; int i4 = 50; int i5 = 40;
pq1.grūdiens (i1); pq1.grūdiens (i2); pq1.grūdiens (i3); pq1.grūdiens (i4); pq1.grūdiens (i5);
prioritātes_mērķis
int it1 = 1; int it2 = 3; int it3 = 2; int it4 = 5; int it5 = 4;
pqA.virzīt (it1); pqA.grūdiens (it2); pqA.grūdiens (it3); pqA.grūst (it4); pqA.grūdiens (it5);
pq1.mijmaiņa (pqA);
kamēr (!pq1.tukšs ())
cout << pq1.top() << ";
pq1.pops ();
cout<<'\n';
kamēr (!pqA.tukšs ())
cout << pqA.top() << ";
pqA.pops ();
cout<<'\n';
Rezultāts ir:
5 4 3 2 1
50 40 30 20 10
Emplace () Fuction
The emplace () funkcija ir līdzīga stumšanas funkcijai. Šis kods ilustrē to:
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);
kamēr (!pq1.tukšs ())
cout << pq1.top() << ";
pq1.pops ();
cout<<'\n';
Rezultāts ir:
50 40 30 20 10
Stīgu dati
Salīdzinot virknes, jāizmanto virkņu klase, nevis tieša virknes literāļu izmantošana, jo tā salīdzinātu rādītājus, nevis faktiskās virknes. Šis kods parāda, kā tiek izmantota virknes klase:
# iekļautprioritātes_mērķis
virkne s1 = virkne ("pildspalva"), s2 = virkne ("zīmulis"), s3 = virkne ("vingrinājumu grāmata"), s4 = virkne ("mācību grāmata"), s5 = virkne ("lineāls");
pq1.grūdiens (s1); pq1.grūdiens (s2); pq1.grūdiens (s3); pq1.grūdiens (s4); pq1.grūdiens (s5);
kamēr (!pq1.tukšs ())
cout << pq1.top() << " ";
pq1.pops ();
cout<<'\n';
Rezultāts ir:
mācību grāmatu lineāls zīmuļa pildspalva uzdevumu grāmata
Citas prioritārās rindas konstrukcijas
Nepārprotama izveide no vektora
Prioritātes rindu var tieši izveidot no vektora, kā parāda šāds kods:
vektors
prioritātes_mērķis
kamēr (!pq.tukšs ())
cout << pq.top() << ";
pq.pops ();
cout<<'\n';
Rezultāts ir: 50 40 30 20 10. Šoreiz jāiekļauj arī vektora galvene. Konstruktora funkcijas argumenti ņem vektora sākuma un beigu rādītājus. Vektora datu tipam un prioritātes_rindas datu tipam jābūt vienādam.
Lai prioritātei piešķirtu vismazāko vērtību, deklarācija konstruktoram būtu šāda:
prioritātes_mērķisSkaidra izveide no masīva
Prioritātes rindu var izveidot tieši no masīva, kā parāda šāds kods:
prioritātes_mērķis
kamēr (!pq.tukšs ())
cout << pq.top() << ";
pq.pops ();
cout<<'\n';
Rezultāts ir: 50 40 30 20 10. Konstruktora funkcijas argumenti ņem masīva sākuma un beigu rādītājus. arr atgriež sākuma rādītāju, “arr + 5” atgriež rādītāju tieši gar masīvu, un 5 ir masīva lielums. Masīva datu tipam un prioritātes_rindas datu tipam jābūt vienādam.
Lai prioritātei piešķirtu vismazāko vērtību, deklarācija konstruktoram būtu šāda:
prioritātes_mērķisPiezīme: Programmā C ++ prioritāšu_rindu faktiski sauc par adapteri, ne tikai par konteineru.
Pielāgots salīdzināšanas kods
Ja visām prioritārā rindā esošajām vērtībām ir augšupejoša vai lejupejoša vērtība, tā nav vienīgā prioritārās rindas iespēja. Piemēram, 11 veselu skaitļu saraksts ar maksimālo kaudzi ir:
88, 86, 87, 84, 82, 79,74, 80, 81,, 64, 69
Augstākā vērtība ir 88. Pēc tam seko divi skaitļi: 86 un 87, kas ir mazāki par 88. Pārējie skaitļi ir mazāki par šiem trim skaitļiem, bet patiesībā nav kārtībā. Sarakstā ir divas tukšas šūnas. Skaitļi 84 un 82 ir mazāki par 86. Skaitļi 79 un 74 ir mazāki par 87. Skaitļi 80 un 81 ir mazāki par 84. Skaitļi 64 un 69 ir mazāki par 79.
Skaitļu izvietojums atbilst maksimālās kaudzes kritērijiem - skatiet vēlāk. Lai nodrošinātu šādu shēmu prioritātes_klasēm, programmētājam ir jāsniedz savs salīdzināšanas kods - skatiet vēlāk.
Secinājums
C ++ priority_queue ir rinda “pirmais iekšā pirmais”. Dalībnieka funkcija, virzīt (), pievieno jaunu vērtību rindā. Dalībnieka funkcija, tops(), nolasa rindas augšējo vērtību. Dalībnieka funkcija, pop (), noņem, neatgriežot rindas augšējo vērtību. Dalībnieka funkcija, tukšs (), pārbauda, vai rinda nav tukša. Tomēr prioritārā_rindas rinda atšķiras no rindas, jo tā seko kādam prioritātes algoritmam. Tas var būt vislielākais, no pirmā līdz pēdējam vai vismazāk no pirmā līdz pēdējam. Kritērijus (algoritmu) var definēt arī programmētājs.