C ++ prioriteringskø med tilpasset komparator

C ++ prioriteringskø med tilpasset komparator
Prioriterte køer er virkelig en unik datatype. De støttes av hauger (en form for et binært tre), men de har blitt brukt på samme måte som køer. Det som skiller en prioriteringskø fra en vanlig kø, vil være at den holder sorteringens ordning i O (LOGN) varighet, selv når du legger til eller sletter nye medlemmer. Med rudimentære datatyper som tall og strenger, ser det ut til å være den enkleste å bruke en prioriteringskø. Prioriterte køer for tilpassede typer er gjennomførbare, og det samme er muligheten til å konstruere et tilpasset sorteringsmønster for grunnleggende slag. Ved hjelp av prioriterte køer kan du bruke en tilpasset komparator, som bestillingsvektorer, for å beskrive hvordan oppføringer i prioriteringskøen kan sorteres. I C ++ er dette vanligvis ferdig med bare en struktur. Lambda -utsagn er imidlertid raskere å konstruere og gi deg tilgang til variabler utenfor omfanget (som er sammensatt for å sikre at med strukturer). Så innenfor denne guiden vil vi diskutere prioritert køeksempel med kundekomparatoren.

Eksempel:

La oss komme i gang med eksemplet på å bruke en prioritert kø med den tilpassede komparatoren i C++. Så terminalskallet må åpnes med Ctrl+ALT+T kort vei. C ++ -filen må opprettes i skallet ved hjelp av "berøringsinstruksjonen til Ubuntu. Det er ganske enkelt å gjøre det. Etter det må denne filen åpnes i noen redigeringsprogrammer for å lage kode. Du kan ha Vim, tekst eller nano -redaktør. Vi bruker “Nano” -redaktøren her for hurtigredigering og oppdatering.

$ berøringskø.CC
$ nano kø.CC

Så den tomme C ++ -filen vil bli åpnet på terminalskjermen i Nano Editor. Det er på tide å legge til noen overskriftsbiblioteker i starten av å få koden vår til å fungere ordentlig. Derfor brukte vi "#include" -tegnet med hver overskrift. "Iostream" -overskriften brukes til å benytte seg av inngangsstrømmen. "Vector" -overskriften er støpt for å bruke Vector Data Structure. Den "uordnede_map" -overskriften har blitt brukt til å lage et kart for verdiene til en vektor i mengder. "Køen" overskriftsfilen er her for å bruke prioriteringskøen og tilhørende datafunksjoner. Vi startet hovedmetoden (). Vi har laget en vektor datastruktur som heter "farge" av strengtype for å holde strengverdier. Mens vektorobjektet "farge" har brukt Push_back () -funksjonen for å legge til noen fargede navn i vektoren, i.e., Rød, grønn, blå, hvit og svart.

#inkludere
#inkludere
#inkludere
#inkludere
ved hjelp av navneområdet STD;
int main ()

cout << "Starting… \n";
vektor farge;
farge.push_back ("rød");
farge.push_back ("grønn");
farge.push_back ("blå");
farge.push_back ("hvit");
farge.push_back ("svart");

Etter å ha opprettet et vektorobjekt, må vi lage en kartstruktur ved hjelp av "uordnede_map" nøkkelord ". Objektet for dette kartet er “M”, og det inneholder streng- og heltallparametere. Kartet er opprettet for å binde heltallmengden med strengvektoren, slik at verdien av heltallstypen er tilordnet strengverdier for en vektor "farge" individuelt.

Uordnede_mapm;
m ["rød"] = 2;
m ["grønn"] = 4;
m ["blå"] = 6;
m ["hvit"] = 8;
m ["svart"] = 10;

Her kommer den tilpassede komparatoren som er erklært som variabel “CMP” med nøkkelordet “Auto.”Auto nøkkelord brukes til å få tilbake resultatet av noen type uten å definere det. "IF" -uttalelsen brukes til å sjekke om mengden av en venstre kartverdi er lik mengden av en riktig kartverdi eller ikke. I så fall vil det returnere at venstre sidekarakter er større enn høyre sidekarakter til en streng til "CMP" -variabelen. Hvis de ikke er like, vil det returnere at kvantitetsverdien på høyre side er større enn mengden av venstre side av en streng gjennom et kart. Dette sorterer mengden i synkende rekkefølge mens strengnavnet er bestilt i stigende rekkefølge.

Auto cmp = [&] (String & l, String & r)
if (m [le] == m [r])
return l> r;
return m [r]> m [l];
;

Nå er det på tide å lage en prioritert kø og legge til alle fargene som bruker vektoren. Så prioriteringskøen har blitt generert ved bruk av strengtypevektoren, og erklæringstypen er satt slik det ble satt fra Comp -variabelen. PQ er prioritert køobjekt. "For" -sløyfen er her for å skyve hver farge til prioriteringskøen "PQ" via push () -funksjonen.

Priority_queue, DeclType (CMP)> PQ (CMP);
for (const string & clr: color)
pq.Push (CLR);

"Mens" -løkken fortsetter å bli utført til køen ikke er tom og legger til hver streng fra den til strengen "CLR". Den aktuelle verdien vil bli dukket opp og vises på skallet. Programkoden vår er fullført her og klar til å bli utført.

samtidig som(!pq.tømme())
strengfrukt = PQ.topp();
pq.pop ();
cout << fruit << " " << m[fruit] << endl;

cout << "Ending… \n";
retur 0;

Samlingen er ganske vellykket. Mer enn det har alle strengverdiene til vektoren blitt vist på skallet sammen med deres mengder som blir kartlagt gjennom “Kart.”Du kan se at mengden ordre er synkende i vårt tilfelle.

$ g ++ kø.CC
$ ./en.ute

Konklusjon:

Dette handlet om det enkle eksemplet på en prioritert kø med en tilpasset komparator i C++. Vi har diskutert det innen et enkelt eksempel i detalj ved å opprettholde en enkel og enklest måte. Vi har lagt til koden i form av biter som hjelper leserne å forstå den godt.