Union of Sets in C ++

Union of Sets in C ++
Tenk på følgende to sett:
a = 'e', 'd', 'c', 'b', 'a'
b = 'h', 'g', 'f', 'e', ​​'d'

I C ++ ville foreningen av disse to settene være:

a = 'a', 'b', 'c', 'd', 'e', ​​'f', 'g', 'h'

Elementene i sett B er sammen med elementene i sett A uten å ha det dobbelte av noe element som var i begge settene. Ethvert slikt element vises en gang i det nye settet. Det nye settet er sortert i stigende rekkefølge med standardinnstillinger.

Før C ++ 20 måtte algoritmebiblioteket brukes på en ganske komplisert måte å ha forening av to sett. For dette formål har algoritmebiblioteket funksjonen set_union () i forskjellige overbelastede former med varierende argumenter. Disse overbelastede funksjonene er fremdeles i bruk i dag, men set_union () vil ikke bli adressert i denne artikkelen.

Set -klassen i C ++ 20 har to overbelastede fusjon () medlemsfunksjoner for å oppnå forening av to sett. Syntaksene kan se kompliserte ut, men de er veldig enkle å bruke. Fettfunksjonene for sammenslåing vil bli brukt i denne artikkelen for å vise hvordan du kan oppnå forening av to sett.

Template Void Merge (Set & Source)

Denne medlemsfunksjonen skaper en forening av to sett. Det returnerer tomrom. Det er settet av interesse som bruker medlemsfunksjonen, smelter sammen (). Det andre settet smelter sammen med interessen. Identifikatoren til det andre settet er argumentet til fusjonsmedlemfunksjonen.

Argumentet ser komplisert ut, men det er det ikke. Argumentet er:

sett kilde

Dette er malen for sett. Det begynner med det reserverte ordet, sett. Husk at det satte enkeltelementene kalles nøkler. Så den første malparameteren er for nøkkeltypen. Det kan være røye, float, dobbel, streng, etc. Den andre malparameteren er for sammenligning av klasseobjekt. Hvis utelatt, er resultatet at settet vil bli sortert stigende, internt. Den tredje parameteren i vinkelbrakettene er for minnetildeling av settelementene. Hvis utelatt, velges standardfordelingen. Kilde står for identifikatoren til det andre settet (eller innkommende sett). Så alt det komplekse argumentparameteren i parentes av syntaks erstattes av identifikatoren til det andre settet i programmet.

Når du oppretter settet av interesse eller det andre settet, bør disse parametrene tas i betraktning. For typisk programmering er det bare nøkkelen som må tas i betraktning.

La følgende sett være settet av interesse:

a = 'e', 'd', 'c', 'b', 'a'

La følgende sett være det andre settet (eller innkommende sett).

b = 'h', 'g', 'f', 'e', ​​'d'

Følgende program fusjonerer sett B i sett 'A'. Det nye settet 'A' er foreningen av det gamle settet 'A' og sett 'B'. Verdiene i sett B som ikke er i sett 'A' blir flyttet til å sette 'A'.

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

Sett A = 'E', 'D', 'C', 'B', 'A';
sett B = 'H', 'G', 'f', 'e', ​​'d';
en.Fusjon (B);
for (sett :: iterator iter = a.begynne(); iter != a.slutt(); iter ++)
cout << *iter << ", ";
cout << endl;
retur 0;

Utgangen er:

A, B, C, D, E, F, G, H,

Merk at unionsettet er arrangert i stigende rekkefølge ved å bruke standard sammenligningsklassen.

Mal Tomid Merge (Set && Source)

Dette er den andre overbelastede medlemsfunksjonen for å slå sammen to sett. Denne medlemsfunksjonen skaper en forening av to sett. Det returnerer tomrom. Det er settet av interesse som bruker medlemsfunksjonen, smelter sammen (). Det andre settet smelter sammen med interessen. Identifikatoren til det andre settet er argumentet til fusjonsfunksjonen (). Denne gangen er identifikatoren en Rvalue -referanseidentifikator.

Argumentet ser komplisert ut, men det er det ikke. Argumentet er:

sett&& kilde

Dette er malen for sett. Det begynner med det reserverte ordet, sett. Husk at satte enkeltelementer kalles nøkler. Så den første malparameteren er for nøkkeltypen. Det kan være røye, float, dobbel, streng, etc. Den andre malparameteren er for sammenligning av klasseobjekt. Hvis utelatt, er resultatet at settet vil bli sortert stigende, internt. Den tredje parameteren i vinkelbrakettene er for minnetildeling av settelementene. Hvis utelatt, velges standardfordelingen. Kilde i dette tilfellet står for Rvalue Reference Identifier of the Other Set (eller innkommende sett). Så alt det komplekse argumentparameteren i parenteser av syntaks erstattes av Rvalue Reference Identifier of the Other Set in the Program. Double Amperes og, &&, i dette tilfellet, betyr Rvalue -referanse. Det er her denne funksjonen skiller seg fra forrige.
Når du oppretter settet av interesse eller det andre settet, bør disse parametrene tas i betraktning. For typisk programmering er det bare nøkkelen som må tas i betraktning.

La følgende sett være settet av interesse:

a = 'e', 'd', 'c', 'b', 'a'

La følgende sett bokstavelig, være det andre settet (eller innkommende sett).

'H', 'g', 'f', 'e', ​​'d'

Følgende program fusjonerer sett B i sett 'A'. Det nye settet 'A' er foreningen av det gamle settet 'A' og sett 'B'. Verdiene i sett B som ikke er i sett 'A' blir flyttet til å sette 'A'.

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

sett a = 'e', 'd', 'c', 'b', 'a';
sett&& b = 'h', 'g', 'f', 'e', ​​'d';
en.Fusjon (B);
for (sett:: iterator iter = a.begynne(); iter != a.slutt(); iter ++)
cout << *iter << ", ";
cout << endl;
retur 0;

Utgangen er:

A, B, C, D, E, F, G, H,

Merk at unionsettet er arrangert i stigende rekkefølge ved å bruke standard sammenligningsklassen.

Konklusjon

Å ha forening av to sett er også smelter sammen begge settene. Den forhåndsdefinerte settklassen i C ++ har to overbelastede medlemsfunksjoner for dette formålet. Det innkommende settet (eller det andre settet) fusjonerer med interessen. Interessens sett bruker Fetts () medlemsfunksjon. Identifikatoren for det innkommende settet er argumentet for fusjonsfunksjonen (). Bare elementer som ikke er i settet av interesse, flyttes fra det innkommende settet til interessen. Set -klassen er i settbiblioteket og må inkluderes i programmet.