Aby bolo možné použiť prioritnú frontu C ++, program by mal začínať kódom ako:
#include#include
pomocou namespace std;
Zahŕňa knižnicu frontov do programu.
Aby mohol čitateľ pokračovať v čítaní, mal mať základné vedomosti o jazyku C++.
Obsah článku
- Úvod - pozri vyššie
- Základná konštrukcia
- Dôležité členské funkcie
- Ďalšie funkcie prioritného frontu
- Údaje reťazca
- Ostatné stavby prednostného frontu
- Záver
Základná konštrukcia
Pred použitím je potrebné najskôr zostaviť dátovú štruktúru. Konštrukcia tu znamená vytvorenie inštancie objektu z triedy frontu knižnice. Objekt frontu potom musí mať programátor pomenovaný podľa svojho názvu. Najjednoduchšia syntax na vytvorenie prioritného frontu je:
prioritná_hodnotaPri tejto syntaxi sa najskôr odstráni najväčšia hodnota. Príklad inštancie je:
prioritná_hodnotaalebo
prioritná_hodnotaVektor a deque sú dve dátové štruktúry v jazyku C++. S prioritou je možné vytvoriť ľubovoľnú z nich. Syntax na vytvorenie prioritného frontu z vektorovej štruktúry je:
prioritná_hodnotaPríkladom tejto inštancie je:
prioritná_hodnotaVšimnite si medzeru medzi> a> na konci vyhlásenia. To zabráni zámene s >>. Predvolený porovnávací kód je „menej
Ak sa má najskôr odstrániť najmenšia hodnota, potom musí byť príkaz:
prioritná_hodnotaDôležité členské funkcie
Funkcia push ()
Táto funkcia vloží hodnotu, ktorá je jej argumentom, do priority_queue. Vráti sa neplatné. Ilustruje to nasledujúci kód:
pq.tlačiť (10);
pq.tlačiť (30);
pq.tlačiť (20);
pq.tlačiť (50);
pq.tlačiť (40);
Táto prioritná_obrana získala 5 celočíselných hodnôt v poradí 10, 30, 20, 50, 40. Ak majú byť všetky tieto prvky vyskočené z frontu priorít, vyjdú v poradí 50, 40, 30, 20, 10.
Funkcia pop ()
Táto funkcia odstráni z priority_queue hodnotu s najvyššou prioritou. Ak je porovnávací kód „väčší
pq.push („a“); pq.push ('c'); pq.tlačiť ('b'); pq.push ('e'); pq.push ('d');
Upozorňujeme, že aby bolo možné zavolať členskú funkciu, musí za názvom objektu nasledovať bodka a potom nasledovať funkcia.
Funkcia hore ()
The pop () funkcia odstráni nasledujúcu hodnotu s najvyššou prioritou, ale nevráti ju, ako pop () je neplatná funkcia. Použi hore () funkcie, aby ste poznali hodnotu s najvyššou prioritou, ktorá musí byť následne odstránená. The hore () funkcia vráti kópiu hodnoty s najvyššou prioritou v prioritnej_kóre. Nasledujúci kód, kde ďalšia hodnota s najvyššou prioritou je najmenšia hodnota, to ilustruje
pq.push („a“); pq.push ('c'); pq.tlačiť ('b'); pq.push ('e'); pq.push ('d');
char ch1 = pq.hore (); pq.pop ();
char ch2 = pq.hore (); pq.pop ();
char ch3 = pq.hore (); pq.pop ();
char ch4 = pq.hore (); pq.pop ();
char ch5 = pq.hore (); pq.pop ();
cout<
Funkcia empty ()
Ak programátor používa hore () funkcia na prázdnu prioritnú_kategóriu, po úspešnej kompilácii by dostal chybové hlásenie ako:
Pred použitím súboru teda vždy skontrolujte, či prioritný front nie je prázdny hore () funkcia. The prázdne () členská funkcia vracia bool, true, ak je fronta prázdna, a false, ak fronta nie je prázdna. Ilustruje to nasledujúci kód:
prioritná_hodnotaint i1 = 10; int i2 = 30; int i3 = 20; int i4 = 50; int i5 = 40;
pq.tlačiť (i1); pq.tlačiť (i2); pq.tlačiť (i3); pq.tlačiť (i4); pq.tlačiť (i5);
zatiaľ čo (!pq.prázdne ())
cout << pq.top() << ";
pq.pop ();
cout << '\n';
Ďalšie funkcie prioritného frontu
Funkcia size ()
Táto funkcia vracia dĺžku frontu priorít, ako ukazuje nasledujúci kód:
int i1 = 10; int i2 = 30; int i3 = 20; int i4 = 50; int i5 = 40;
pq.tlačiť (i1); pq.tlačiť (i2); pq.tlačiť (i3); pq.tlačiť (i4); pq.tlačiť (i5);
int len = pq.veľkosť ();
cout << len << '\n';
Výstup je 5.
Funkcia swap ()
Ak sú dva prioritné_kanály rovnakého typu a veľkosti, môžu byť pomocou tejto funkcie zamenené, ako ukazuje nasledujúci kód:
int i1 = 10; int i2 = 30; int i3 = 20; int i4 = 50; int i5 = 40;
pq1.tlačiť (i1); pq1.tlačiť (i2); pq1.tlačiť (i3); pq1.tlačiť (i4); pq1.tlačiť (i5);
prioritná_hodnota
int it1 = 1; int it2 = 3; int it3 = 2; int it4 = 5; int it5 = 4;
pqA.tlačiť (it1); pqA.tlačiť (it2); pqA.tlačiť (it3); pqA.tlačiť (it4); pqA.tlačiť (it5);
pq1.swap (pqA);
zatiaľ čo (!pq1.prázdne ())
cout << pq1.top() << ";
pq1.pop ();
cout<<'\n';
zatiaľ čo (!pqA.prázdne ())
cout << pqA.top() << ";
pqA.pop ();
cout<<'\n';
Výstup je:
5 4 3 2 1
50 40 30 20 10
Funkcia emplace ()
The miesto () funkcia je podobná funkcii push. Ilustruje to nasledujúci kód:
int i1 = 10; int i2 = 30; int i3 = 20; int i4 = 50; int i5 = 40;
pq1.miesto (i1); pq1.miesto (i2); pq1.miesto (i3); pq1.miesto (i4); pq1.emplace (i5);
zatiaľ čo (!pq1.prázdne ())
cout << pq1.top() << ";
pq1.pop ();
cout<<'\n';
Výstup je:
50 40 30 20 10
Údaje reťazca
Pri porovnávaní reťazcov by sa mala použiť trieda reťazcov a nie priame použitie reťazcových literálov, pretože by porovnávali ukazovatele a nie skutočné reťazce. Nasledujúci kód ukazuje, ako sa používa trieda reťazcov:
#includeprioritná_hodnota
reťazec s1 = reťazec („pero“), s2 = reťazec („ceruzka“), s3 = reťazec („cvičebnica“), s4 = reťazec („učebnica“), s5 = reťazec („pravítko“);
pq1.tlačiť (s1); pq1.tlačiť (s2); pq1.tlačiť (s3); pq1.tlačiť (s4); pq1.tlačiť (s5);
zatiaľ čo (!pq1.prázdne ())
cout << pq1.top() << " ";
pq1.pop ();
cout<<'\n';
Výstup je:
textová kniha pravítko ceruzka pero cvičebnica
Ostatné stavby prednostného frontu
Výslovné vytvorenie z vektora
Frontu priorít je možné vytvoriť explicitne z vektora, ako ukazuje nasledujúci kód:
vektor
prioritná_hodnota
zatiaľ čo (!pq.prázdne ())
cout << pq.top() << ";
pq.pop ();
cout<<'\n';
Výstup je: 50 40 30 20 10. Tentokrát musí byť zahrnutá aj hlavička vektora. Argumenty pre funkciu konštruktora majú počiatočný a konečný ukazovateľ vektora. Dátový typ pre vektor a dátový typ pre prioritnú_kategóriu musia byť rovnaké.
Aby bola z priority najmenšia hodnota, vyhlásenie pre konštruktora by bolo:
prioritná_hodnotaVýslovné vytvorenie z poľa
Prioritný front je možné vytvoriť explicitne z poľa, ako ukazuje nasledujúci kód:
prioritná_hodnota
zatiaľ čo (!pq.prázdne ())
cout << pq.top() << ";
pq.pop ();
cout<<'\n';
Výstup je: 50 40 30 20 10. Argumenty pre funkciu konštruktora majú počiatočný a konečný ukazovateľ poľa. arr vráti začiatočný ukazovateľ, „arr + 5“ vráti ukazovateľ tesne za poľom a 5 je veľkosť poľa. Dátový typ pre pole a dátový typ pre prioritnú_kategóriu musia byť rovnaké.
Aby bola z priority najmenšia hodnota, vyhlásenie pre konštruktora by bolo:
prioritná_hodnotaPoznámka: V C ++ sa prioritná_skript v skutočnosti nazýva adaptér, nielen kontajner.
Vlastný porovnávací kód
Zvyšovanie alebo klesanie všetkých hodnôt v prioritnom fronte nie je jedinou možnosťou pre prioritný front. Napríklad zoznam 11 celých čísel pre maximálnu hromadu je:
88, 86, 87, 84, 82, 79,74, 80, 81,, 64, 69
Najvyššia hodnota je 88. Nasledujú dve čísla: 86 a 87, čo je menej ako 88. Zvyšok čísel je menej ako tieto tri čísla, ale nie v poriadku. V zozname sú dve prázdne bunky. Čísla 84 a 82 sú menej ako 86. Čísla 79 a 74 sú menej ako 87. Čísla 80 a 81 sú menej ako 84. Čísla 64 a 69 sú menej ako 79.
Umiestnenie čísel sa riadi kritériami maximálnej haldy - pozri ďalej. Aby bolo možné poskytnúť takúto schému pre prioritnú_kategóriu, musí programátor poskytnúť svoj vlastný porovnávací kód - pozri ďalej.
Záver
C ++ priority_queue je front typu „prvý-prvý-prvý-von“. Členská funkcia, tam(), pridáva do frontu novú hodnotu. Členská funkcia, hore (), načíta najvyššiu hodnotu vo fronte. Členská funkcia, pop (), odstráni bez vrátenia najvyššej hodnoty frontu. Členská funkcia, prázdne (), skontroluje, či je rad prázdny. Prioritná_nážka sa však líši od fronty v tom, že sa riadi niektorým prioritným algoritmom. Môže byť najväčší, od prvého do posledného, alebo najmenej, od prvého do posledného. Kritériá (algoritmus) môžu byť definované aj programátorom.