Sett vs kart i C ++

Sett vs kart i C ++
Målet med denne artikkelen er å gi likhetene og forskjellene mellom et sett og et kart. “VS” i tittelen betyr “versus”. Først av alt, hva er et sett? - Et sett i C ++ er som settet i matematikk. I C ++ er et sett en gruppe av ikke nødvendigvis ikke -relaterte verdier, men av samme type. Verdiene til et sett kalles nøkler i C++.

Hva er da et kart? - Et kart er et sett med nøkkel/verdipar. I C ++ er nøklene av samme type, og verdiene er også av samme type. Det er multisett og det er multimap. Et multisett er et sett der verdiene ikke er unike; det vil si at det kan være mer enn en av de samme verdiene. Ikke glem at verdiene til settet kalles nøkler i C++. På et kart kan noen av verdiene være de samme, men nøklene må være forskjellige (unike). I en multimap kan det være mer enn en nøkkel, som er de samme.

Tittelen på denne artikkelen er “Set vs Map in C ++”. Så multiset og multimap blir ikke vurdert i denne artikkelen; Bare sett og kart blir sammenlignet og kontrast.

Hver gang en nøkkel settes inn i et sett, blir settet sortert på nytt. Merk: Et sett i C ++ kan også ha nøkkel/verdipar; Og dette er ikke et matematisk syn på settet. - Likevel, i C ++, kan et sett ha nøkkel/verdipar. Så hver gang et nøkkel-/verdipar settes inn i et sett, blir settet sortert på nytt med nøkler. På den annen side består et kart per definisjon av nøkkel/verdipar der tastene ikke har noen duplikat. Med kartet også, hver gang et nøkkel-/verdipar settes inn i kartet, blir kartet sortert på nytt av tastene. Settet og kartet er det samme i denne forbindelse.

Både settet og kartet har hver for seg å sammenligne malspesialisering. Begge er assosiative containere. For noen av dem, for å få datastrukturen sortert stigende, bruk sammenligningsmalspesialiseringen, mindre, erstatte "nøkkel", med nøkkeltypen. For en av dem, for å få datastrukturen sortert nedgang, bruk sammenligningsmalspesialisering, større, erstatte "nøkkel", med nøkkeltypen. For begge er mindre standard.

For begge datastrukturer er medlemsfunksjoner kategorier i følgende kategorier: konstruksjoner (inkludert kopi og tildeling), iteratorer, modifikatorer, observatører, operasjoner og bytte. I alle disse kategoriene fungerer medlemmet for både settet og kartet.

Den angitte datastrukturen har ikke kategorien for tilgang til elementet, men kartet gjør det. Elementtilgangskategorien består av kvadratkoblingsoperatørene og AT () medlemsfunksjonene som brukes som kolleger for vektoren. De er vant til å få tilgang til (skanne) hvert av elementet på kartet. Settet har ikke disse operatørene eller funksjonene. For settet er det tilgjengelig elementer ved hjelp av iteratorer. Elementer kan også nås for kartet med lignende iteratorer.

Over er de viktigste likhetene og forskjellene for settet og kartet. Det særegne i denne sammenligningen er med bruk av nøkkel/verdipar. Nøkkel/verdipar er av strukturen som heter par i C ++ verktøybiblioteket. Resten av denne artikkelen gir en kort beskrivelse av hvordan paret brukes i både settet og kartet, som begynner med hva et par er:

Par

Syntaksen til et par bokstavelig er:

nøkkel, verdi

En serie slike par som vil bestå av et sett eller kart er:

"sitroner", 8
"appelsiner", 5
"Pears", 12

Dette representerer en datastruktur av frukt og antall som finnes i en kurv. Nøkkelen for hvert par er strengtypen; og verdien for hvert par er heltallstypen. Følgende program konstruerer tre forskjellige par av samme verdi_type, streng/int:

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

par pr1 = "sitroner", 8;
par pr2 = "appelsiner", 5;
par pr3 = "pærer", 12;
retur 0;

Merk at verktøybiblioteket var inkludert. Navnene på parene er PR1, PR2 og PR3. De er av samme verdi_type, streng/int.

Nøkkelen/verdien til et par må ikke nødvendigvis være streng/int. Det kan være iterator/bool med bokstavelig syntaks:

iterator, bool

I et parobjekt er bool enten sant eller usant, og iterator er navnet på iteratoren. Det er denne typen par som returneres når et nøkkel/verdipar, for eksempel et streng/int -par, settes inn i et sett eller et kart. Bool -komponenten er sann, hvis og bare hvis innsetting av paret fant sted. Iteratorkomponenten peker på det aktuelle innsatte elementet (nøkkel og verdi) som helhet.

Nøkkelen til et par heter “First” i C ++; og verdien av paret heter “Second”.

Sett og kartlegge konstruksjoner

Sett
Et tomt sett med streng/int -par vil bli konstruert som følger:

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

sett> ST;
retur 0;

Nøkkelmalspesialiseringen er "par", og den regnes som en komponent. Den ene komponenten refererer til paret (av nøkkel/verdi).

Kart
Et tomt kart over streng/int -par vil bli konstruert som følger:

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

kart MP;
retur 0;

Her begynner malspesialisering med nøkkel og deretter verdi. Nøkkelmalspesialiseringen er “String” og verdimalspesialiseringen er “Int”. Det er to komponenter for kartet, som er nøkkelen og verdien. For settet er det en komponent som består av to interne komponenter. Legg merke til forskjellen.

Innsetting

Sett
Følgende C ++ Main () -funksjonskode viser hvordan par kan settes inn i et sett og skrives ut (vises på skjermen):

par Pra = "Pears", 12, Prb = "Oranges", 5, prc = "sitroner", 8;
sett> ST;
st.Sett inn (PRA); st.Sett inn (PRB); st.Sett inn (PRC);
for (sett> :: iterator iter = ST.begynne(); iter != ST.slutt(); iter ++)
cout << iter->først << " => "" << iter->sekund << endl;

Utgangen er:

Sitroner => 8
appelsiner => 5
pærer => 12

Legg merke til at selv om nøkkelen/verdiparene ikke ble satt inn i stigende rekkefølge av nøkler, elementene der internt sorteres etter nøkler. Settet vil alltid sortere elementene etter nøkler, enten de er par eller ikke.

Kart
Følgende Main () -funksjonskode viser hvordan par kan settes inn i et kart og skrives ut (vises på skjermen):

par Pra = "Pears", 12, Prb = "Oranges", 5, prc = "sitroner", 8;
kart MP;
MP.Sett inn (PRA); MP.Sett inn (PRB); MP.Sett inn (PRC);
for (kart:: iterator iter = mp.begynne(); iter != MP.slutt(); iter ++)
cout << iter->først << " => "" << iter->sekund << endl;

Utgangen er:

Sitroner => 8
appelsiner => 5
pærer => 12

Selv om nøkkelen/verdiparene ikke ble satt inn i stigende rekkefølge av nøkler, er elementene der internt sortert etter nøkler. Kartet vil alltid sortere elementene med nøkler.

Konklusjon

Likhetene og forskjellene mellom et sett og et kart i C ++ blir lett verdsatt fra deres forskjellige definisjoner. Det særegne dukker opp når du arbeider med par. I C ++ kan et sett ha par som egentlig ikke er det matematikk antyder. Likevel trenger programmereren å vite hvordan de skal håndtere par for et sett og for et kart.