För att kunna använda C ++ -prioritetsvärdet bör programmet börja med kod som:
#omfatta#omfatta
använder namnrymd std;
Det inkluderar köbiblioteket i programmet.
För att fortsätta läsa borde läsaren ha haft grundläggande kunskaper om C++.
Artikelinnehåll
- Inledning - se ovan
- Grundläggande konstruktion
- Viktiga medlemsfunktioner
- Andra prioriterade köfunktioner
- Strängdata
- Andra prioriterade kökonstruktioner
- Slutsats
Grundläggande konstruktion
Datastrukturen måste konstrueras först innan den kan användas. Konstruktion här innebär att man startar ett objekt från bibliotekets köklass. Köobjektet måste då ha ett namn som ges av programmeraren. Den enklaste syntaxen för att skapa en prioritetskö är:
prioritets_köMed denna syntax tas det största värdet bort först. Ett exempel på instantiering är:
prioritets_köeller
prioritets_köVektorn och deken är två datastrukturer i C++. En prioritets_kö kan skapas med någon av dem. Syntaxen för att skapa en prioritetskö från vektorn är:
prioritets_köEtt exempel på denna instantiering är:
prioritets_köLägg märke till klyftan mellan> och> i slutet av deklarationen. Detta för att förhindra förvirring med >>. Standardjämförelsekoden är ”mindre
Om det minsta värdet ska tas bort först måste uttalandet vara:
prioritets_köViktiga medlemsfunktioner
Push () -funktionen
Denna funktion skjuter ett värde, som är dess argument, in i prioritet_kö. Det återgår ogiltigt. Följande kod illustrerar detta:
pq.tryck (10);
pq.tryck (30);
pq.tryck (20);
pq.tryck (50);
pq.tryck (40);
Denna prioritetskö har fått 5 heltal i storleksordningen 10, 30, 20, 50, 40. Om alla dessa element ska poppas ut ur prioritetskön kommer de i storleksordningen 50, 40, 30, 20, 10.
Pop () -funktionen
Denna funktion tar bort värdet med högsta prioritet från prioritet_kön. Om jämförelsekoden är ”större
pq.tryck ('a'); pq.tryck ('c'); pq.tryck ('b'); pq.tryck ('e'); pq.tryck ('d');
Observera att för att anropa en medlemsfunktion måste namnet på objektet följas av en punkt och sedan funktionen.
Toppfunktionen ()
De pop() funktionen tar bort nästa värde med högsta prioritet, men returnerar det inte, som pop() är en ogiltig funktion. Använd topp() funktion för att känna till värdet på högsta prioritet som måste tas bort nästa. De topp() funktionen returnerar en kopia av värdet med högsta prioritet i prioritet_kö. Följande kod, där nästa värde med högsta prioritet är det minsta värdet, illustrerar detta
pq.tryck ('a'); pq.tryck ('c'); pq.tryck ('b'); pq.tryck ('e'); pq.tryck ('d');
char ch1 = pq.topp(); pq.pop();
char ch2 = pq.topp(); pq.pop();
char ch3 = pq.topp(); pq.pop();
char ch4 = pq.topp(); pq.pop();
char ch5 = pq.topp(); pq.pop();
cout<
Den tomma () funktionen
Om en programmerare använder topp() funktion på en tom prioritet_kö, efter den lyckade sammanställningen, skulle han få ett felmeddelande som:
Så kontrollera alltid om prioritetskön inte är tom innan du använder topp() fungera. De tömma() medlemsfunktionen returnerar en bool, sant, om kön är tom och falsk om kön inte är tom. Följande kod illustrerar detta:
prioritets_köint i1 = 10; int i2 = 30; int i3 = 20; int i4 = 50; int i5 = 40;
pq.tryck (i1); pq.tryck (i2); pq.tryck (i3); pq.tryck (i4); pq.tryck (i5);
medan(!pq.tömma())
cout << pq.top() << ";
pq.pop();
cout << '\n';
Andra prioriterade köfunktioner
Funktionen storlek ()
Den här funktionen returnerar längden på prioritetskön, som följande kod illustrerar:
int i1 = 10; int i2 = 30; int i3 = 20; int i4 = 50; int i5 = 40;
pq.tryck (i1); pq.tryck (i2); pq.tryck (i3); pq.tryck (i4); pq.tryck (i5);
int len = pq.storlek();
cout << len << '\n';
Utgången är 5.
Swap-funktionen ()
Om två prioritetskövlar är av samma typ och storlek kan de bytas ut med den här funktionen, som följande kod visar:
int i1 = 10; int i2 = 30; int i3 = 20; int i4 = 50; int i5 = 40;
pq1.tryck (i1); pq1.tryck (i2); pq1.tryck (i3); pq1.tryck (i4); pq1.tryck (i5);
prioritets_kö
int it1 = 1; int it2 = 3; int it3 = 2; int it4 = 5; int it5 = 4;
pqA.tryck (it1); pqA.tryck (it2); pqA.tryck (it3); pqA.tryck (it4); pqA.tryck (it5);
pq1.swap (pqA);
medan(!pq1.tömma())
cout << pq1.top() << ";
pq1.pop();
cout<<'\n';
medan(!pqA.tömma())
cout << pqA.top() << ";
pqA.pop();
cout<<'\n';
Utgången är:
5 4 3 2 1
50 40 30 20 10
Emplace () Fuction
De emplace () funktionen liknar push-funktionen. Följande kod illustrerar detta:
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);
medan(!pq1.tömma())
cout << pq1.top() << ";
pq1.pop();
cout<<'\n';
Utgången är:
50 40 30 20 10
Strängdata
Vid jämförelse av strängar bör strängklassen användas och inte direkt användning av stränglitteralerna eftersom den skulle jämföra pekare och inte de faktiska strängarna. Följande kod visar hur strängklassen används:
#omfattaprioritets_kö
sträng s1 = sträng ("penna"), s2 = sträng ("penna"), s3 = sträng ("övningsbok"), s4 = sträng ("textbok"), s5 = sträng ("linjal");
pq1.tryck (s1); pq1.tryck (s2); pq1.tryck (s3); pq1.tryck (s4); pq1.tryck (s5);
medan(!pq1.tömma())
cout << pq1.top() << " ";
pq1.pop();
cout<<'\n';
Utgången är:
textbok linjal penna penna övning bok
Andra prioriterade kökonstruktioner
Explicit skapande från en vektor
En prioritetskö kan skapas uttryckligen från en vektor som följande kod visar:
vektor
prioritets_kö
medan(!pq.tömma())
cout << pq.top() << ";
pq.pop();
cout<<'\n';
Utgången är: 50 40 30 20 10. Den här gången måste också vektorhuvudet inkluderas. Argumenten för konstruktörfunktionen tar start- och slutpekarna för vektorn. Datatypen för vektorn och datatypen för prioritet_kö måste vara densamma.
För att prioritera det minsta värdet skulle deklarationen för konstruktören vara:
prioritets_köExplicit skapande från en matris
En prioritetskö kan skapas uttryckligen från en matris som följande kod visar:
prioritets_kö
medan(!pq.tömma())
cout << pq.top() << ";
pq.pop();
cout<<'\n';
Utgången är: 50 40 30 20 10. Argumenten för konstruktorfunktionen tar start- och slutpekarna för matrisen. arr returnerar startpekaren, "arr + 5" returnerar pekaren precis förbi arrayen, och 5 är storleken på arrayen. Datatypen för matrisen och datatypen för prioritet_kö måste vara densamma.
För att prioritera det minsta värdet skulle deklarationen för konstruktören vara:
prioritets_köObs! I C ++ kallas prioritetsvärdet faktiskt en adapter, inte bara en container.
Anpassad jämförkod
Att ha alla värden i prioritetskön stigande eller alla fallande är inte det enda alternativet för prioritetskön. Till exempel är en lista med 11 heltal för en maximal höjd:
88, 86, 87, 84, 82, 79,74, 80, 81,,, 64, 69
Det högsta värdet är 88. Detta följs av två siffror: 86 och 87, som är mindre än 88. Resten av siffrorna är mindre än dessa tre siffror, men egentligen inte i ordning. Det finns två tomma celler i listan. Siffrorna 84 och 82 är mindre än 86. Siffrorna 79 och 74 är mindre än 87. Siffrorna 80 och 81 är mindre än 84. Siffrorna 64 och 69 är mindre än 79.
Placeringen av siffrorna följer max-heap-kriterierna - se senare. För att kunna tillhandahålla ett sådant schema för prioritetskön måste programmeraren tillhandahålla sin egen jämförelsekod - se senare.
Slutsats
En C ++ -prioritetskö är en först-in-först-ut-kö. Medlemmens funktion, skjuta på(), lägger till ett nytt värde i kön. Medlemmens funktion, topp(), läser toppvärdet i kön. Medlemmens funktion, pop(), tar bort utan att köens toppvärde returneras. Medlemmens funktion, tömma(), kontrollerar om kön är tom. Prioritetskön skiljer sig dock från kön, eftersom den följer någon prioritetsalgoritm. Det kan vara störst, från första till sista, eller minst, från första till sista. Kriterierna (algoritm) kan också programmerardefinieras.