Sortering av elementer i et C ++ -sett

Sortering av elementer i et C ++ -sett
Et eksempel på et sett er: ST = 'E', 'A', 'D', 'B', 'C'

Inngangstegnene her er usortert. Dette settet kan opprettes med følgende uttalelse:

sett st = 'e', 'a', 'd', 'b', 'c';

Dette er et sett med chars. Det er mulig å ha et sett av en annen type. Uansett hva som er tilfelle for å drive koding, må C ++ SET -biblioteket inkluderes i programmet. Tenk på følgende program:

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

setst = 'e', 'a', 'd', 'b', 'c';
for (sett :: iterator iter = st.begynne(); iter != ST.slutt(); iter ++)
cout<< *iter<< ", ";
cout<retur 0;

Utgangen er:

A, B, C, D, E,

Utgangen sorteres opp stigende når inngangen ikke ble sortert. Etter at elementer er satt inn i et sett, blir de sortert. Med standardinnstilling, som i programmet ovenfor, er den typen stigende.

Ovennevnte program begynte med inkludering av iostream -biblioteket. Dette er nødvendig for bruk med terminalen (konsoll). Neste linje er et annet direktiv som inkluderer det faste biblioteket. Linjen etter er ikke et direktiv. Det er en uttalelse som slutter med at en semikolon insisterer på at ethvert navn som ikke er gitt av "STD ::" er fra standardnavnet.

Topplinjene blir fulgt av C ++ Main () -funksjonen. Den første uttalelsen i hovedfunksjonen erklærer settet. Det andre kodesegmentet viser verdiene til settet, som burde ha gjennomgått intern sortering, etter C++.

Etter å ha satt sortert stigende

I standard navneområde er syntaksen for å konstruere et sett faktisk:

mal, Klasseallokator = tildeling> Klassesett;

Det er tre malspesialiseringer her. Hvis den siste ikke er gitt av programmereren, velges standardverdien av C++. Hvis den siste og andre ikke er gitt av programmereren, blir standardverdiene valgt. Standardverdien for den andre spesialiseringen er "mindre", noe som betyr at du stiger opp stigende. Hvis utelatt, er settet fremdeles sortert stigende. Hvis det er til stede som "mindre", er settet sortert stigende, som følgende program viser:

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

settst = 'e', 'a', 'd', 'b', 'c';
for (sett :: iterator iter = st.begynne(); iter != ST.slutt(); iter ++)
cout<< *iter<< ", ";
cout<retur 0;

Legg merke til at "røye" er i stedet for "nøkkel" i "mindre". Utgangen er:

A, B, C, D, E,

sortert stigende. Programmet begynner med inkludering av iostream -biblioteket. Dette er nødvendig for bruk med terminalen (konsoll). Neste linje er et annet direktiv som inkluderer det faste biblioteket. Linjen etter er ikke et direktiv. Det er en uttalelse som slutter med at en semikolon insisterer på at ethvert navn som ikke er gitt av "STD ::" er fra standardnavnet.

Topplinjene blir fulgt av C ++ Main () -funksjonen. Den første uttalelsen i hovedfunksjonen erklærer settet med "mindre" som den andre malspesialiseringen. Det andre kodesegmentet viser verdiene til settet, som burde ha gjennomgått intern sortering på riktig måte, med C++.

Etter å ha satt sortert nedstiger

For å ha et sett sortert synkende, må den andre spesialiseringen inkluderes. Det er "større", der "nøkkel" erstattes av datatypen. Mindre og større er forhåndsdefinerte funksjoner i det faste biblioteket. Følgende program resulterer i et sett som er sortert synkende:

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

settst = 'e', 'a', 'd', 'b', 'c';
for (sett :: iterator iter = st.begynne(); iter != ST.slutt(); iter ++)
cout<< *iter<< ", ";
cout<retur 0;

Utgangen er:

E, d, c, b, a,

sortert nedstiger. Programmet begynner med inkludering av iostream -biblioteket. Dette er nødvendig for bruk med terminalen (konsoll). Neste linje er et annet direktiv som inkluderer det faste biblioteket. Linjen etter er ikke et direktiv. Det er en uttalelse som slutter med en semikolon, og insisterer på at ethvert navn som ikke er gitt av "STD ::" er av standardnavnet.

Topplinjene blir fulgt av C ++ Main () -funksjonen. Den første uttalelsen i hovedfunksjonen erklærer settet med "større" som den andre malspesialiseringen. Det andre kodesegmentet viser verdiene til settet, som burde ha gjennomgått intern sortering på riktig måte, med C++.

Observatører

Syntaksene for de faste observatørene er:

KEY_COMPARE KEY_COMP () const;

og

verdi_compare value_comp () const;
KEY_COMPARE KEY_COMP () const
Tenk på følgende kodesegment:
sett> st = 'e', 'a', 'd', 'b', 'c';
bool bl = st.key_comp () ('c', 'd');
cout << bl << endl;

Utgangen er: 1, for sann.

KEY_COMP () er en medlemsfunksjon i SET -klassen. Det krever ikke noe argument. Den returnerer et funksjonsobjekt som er en funksjon som tar to argumenter. Funksjonsobjektet (samtale) er identifisert i den andre uttalelsen ovenfor som “ST.Key_comp () () ”. Argumentene forventes å være elementer i settet etter intern sortering basert på sammenligningsmalspesialiseringen.

Hvis det første argumentet kommer først i settet etter intern sortering, vil funksjonsobjektet returnere sant, ellers vil det returnere falskt. Alt som er kodet i den andre uttalelsen ovenfor.

Hvis sammenligningsmalspesialiseringen hadde vært "større", ville utdataene vært 0, for falsk.

verdi_compare value_comp () const;

Dette angår verdiene til settet med nøkkel/verdipar - se senere.

Konklusjon

Etter at elementer er satt inn i et sett i C ++, blir de umiddelbart sortert internt. Hvis sammenligningsmalspesialiseringen er "mindre", som er standard, og kan utelates, vil sorteringen bli gjort opp stigende. Hvis den er "større", vil sortering bli gjort av synkende. “Nøkkel” i disse uttrykkene erstattes av typen verdier i settet. Verdiene er av en type.

Så et sett trenger ikke en sortert medlemsfunksjon fordi verdiene alltid er sortert. Når et sett opprettes med noen innledende elementer, blir disse elementene sortert. Ethvert innsats av ethvert element etter at det forårsaker re-sorting. Verdiene til et sett som det som er beskrevet ovenfor kalles nøkler. Noen sett kan imidlertid ha nøkkel/verdipar - se senere.