Imposta vs mappa in C ++

Imposta vs mappa in C ++
Lo scopo di questo articolo è quello di dare le somiglianze e le differenze tra un set e una mappa. "Vs" nel titolo significa "contro". Prima di tutto, ciò che è un set? - Un set in C ++ è come il set in matematica. In C ++, un set è un gruppo di valori non necessariamente non correlati, ma dello stesso tipo. I valori di un set sono chiamati tasti in c++.

Cos'è allora una mappa? - Una mappa è un insieme di coppie di tasti/valore. In C ++, le chiavi sono dello stesso tipo e anche i valori sono dello stesso tipo. C'è multiset e c'è multimap. Un multiset è un set in cui i valori non sono univoci; cioè, può esserci più di uno degli stessi valori. Non dimenticare che i valori dell'insieme sono chiamati tasti in c++. In una mappa, alcuni dei valori possono essere uguali, ma le chiavi devono essere diverse (uniche). In un multimap, può esserci più di una chiave, che sono le stesse.

Il titolo di questo articolo è "SET VS MAP in C ++". Pertanto, in questo articolo, multiset e multimap non sono considerati; Vengono confrontati e contrastati solo set e mappa.

Ogni volta che una chiave viene inserita in un set, il set viene rinnovato. NOTA: un set in C ++ può anche avere coppie chiave/valore; e questa non è una visione matematica del set. - Tuttavia, in C ++, un set può avere coppie chiave/valore. Quindi, ogni volta che una coppia di tasti/valore viene inserita in un set, il set viene revocato dai tasti. D'altra parte, una mappa per definizione è costituita da coppie chiave/valore in cui i tasti non hanno duplicato. Con anche la mappa, ogni volta che viene inserita una coppia di tasti/valore. Il set e la mappa sono uguali al riguardo.

Sia il set che la mappa hanno ciascuno la specializzazione del modello di confronto. Entrambi sono contenitori associativi. Per uno di essi, per far salire la struttura dei dati ascendente, utilizzare la specializzazione del modello di confronto, meno, sostituendo la "chiave", con il tipo di chiavi. Per uno di essi, per far ordinare la struttura dei dati in declino, utilizzare la specializzazione del modello di confronto, maggiore, sostituendo la "chiave", con il tipo di chiavi. Per entrambi, meno è il valore predefinito.

Per entrambe le strutture di dati, le funzioni dei membri sono categorie nelle seguenti categorie: costruzioni (inclusi copia e assegnazione), iteratori, modificatori, osservatori, operazioni e swap. In tutte queste categorie, il membro funziona sia per l'insieme che per la mappa sono simili.

La struttura dei dati set non ha la categoria di accesso agli elementi, ma la mappa lo fa. La categoria di accesso agli elementi è costituita da operatori di staffe quadrate e funzioni membri AT () che vengono utilizzate come le controparti per il vettore. Vengono utilizzati per accedere (scansionare) ciascuno dell'elemento nella mappa. Il set non ha questi operatori o funzioni. Per il set, si accede ad elementi utilizzando iteratori. È possibile accedere anche elementi per la mappa utilizzando iteratori simili.

Sopra sono le principali somiglianze e differenze per l'insieme e la mappa. La peculiarità in questo confronto è con l'uso di coppie chiave/valore. La coppia chiave/valore è della struttura chiamata coppia nella libreria di utilità C ++. Il resto di questo articolo fornisce una breve descrizione di come la coppia viene impiegata sia nel set che nella mappa, a partire da ciò che è una coppia:

Paio

La sintassi di una coppia letterale è:

Key, Value

Una serie di tali coppie che consistono in un set o una mappa è:

"Lemons", 8
"arance", 5
"Pears", 12

Ciò rappresenta una struttura di dati di frutta e il loro numero trovato in un paniere. La chiave per ogni coppia è il tipo di stringa; e il valore per ogni coppia è il tipo intero. Il seguente programma costruisce tre diverse coppie dello stesso valore_type, string/int:

#includere
#includere
Utilizzo dello spazio dei nomi std;
int main ()

paio pr1 = "Lemons", 8;
paio pr2 = "arance", 5;
paio pr3 = "Pears", 12;
restituzione 0;

Si noti che la libreria di utilità è stata inclusa. I nomi delle coppie sono PR1, PR2 e PR3. Sono dello stesso valore_type, string/int.

La chiave/valore di una coppia non deve necessariamente essere stringa/int. Può essere iteratore/bool con la sintassi letterale:

iteratore, bool

In un oggetto coppia, il bool è vero o falso, e l'iteratore è il nome di iteratore. È questo tipo di coppia che viene restituita quando una coppia chiave/valore, come una coppia stringa/int, viene inserita in un set o una mappa. Il componente bool è vero, se e solo se ha avuto luogo l'inserimento della coppia. Il componente iteratore punta al particolare elemento inserito (chiave e valore) nel suo insieme.

La chiave di una coppia è chiamata "prima" in C ++; e il valore della coppia è chiamato "secondo".

Set e mappa le costruzioni

Impostato
Un set vuoto di coppie stringa/int verrebbe costruito come segue:

#includere
#includere
#includere
Utilizzo dello spazio dei nomi std;
int main ()

impostato> st;
restituzione 0;

La specializzazione del modello chiave è "coppia" ed è considerata come un componente. L'unico componente si riferisce alla coppia (di chiave/valore).

Carta geografica
Una mappa vuota di coppie stringa/int verrebbe costruita come segue:

#includere
#includere
#includere
Utilizzo dello spazio dei nomi std;
int main ()

carta geografica MP;
restituzione 0;

Qui, la specializzazione dei modelli inizia con la chiave e quindi il valore. La specializzazione del modello chiave è "stringa" e la specializzazione del modello di valore è "int". Ci sono due componenti per la mappa, che sono la chiave e il valore. Per il set, esiste un componente che consiste in due componenti interni. Nota la differenza.

Inserimento

Impostato
Il seguente codice funzione C ++ Main () mostra come le coppie possono essere inserite in un set e stampato (visualizzato sullo schermo):

paio pra = "Pears", 12, prb = "arance", 5, prc = "limoni", 8;
impostato> st;
st.inserire (PRA); st.inserire (PRB); st.inserire (RPC);
per (set> :: iterator iter = st.inizio(); iter != st.FINE(); iter ++)
cout << iter->Primo << " => " << iter->secondo << endl;

L'output è:

limoni => 8
arance => 5
pere => 12

Si noti che sebbene le coppie chiave/valore non siano state inserite in ordine crescente per chiavi, gli elementi in cui sono stati ordinati internamente per chiavi. Il set risolverà sempre i suoi elementi per chiavi, che siano coppie o no.

Carta geografica
Il seguente codice funzione principale () mostra come le coppie possono essere inserite in una mappa e stampate (visualizzate sullo schermo):

paio pra = "Pears", 12, prb = "arance", 5, prc = "limoni", 8;
carta geografica MP;
mp.inserire (PRA); mp.inserire (PRB); mp.inserire (RPC);
per (mappa:: iterator iter = mp.inizio(); iter != mp.FINE(); iter ++)
cout << iter->Primo << " => " << iter->secondo << endl;

L'output è:

limoni => 8
arance => 5
pere => 12

Sebbene le coppie chiave/valore non siano state inserite in ordine crescente per chiavi, gli elementi in cui sono stati ordinati internamente per chiavi. La mappa risolverà sempre i suoi elementi per chiavi.

Conclusione

Le somiglianze e le differenze tra un set e una mappa in C ++ sono facilmente apprezzate dalle loro diverse definizioni. La peculiarità viene fuori quando si tratta di coppie. In C ++, un set può avere coppie che non sono proprio ciò che la matematica suggerisce. Anche così, il programmatore deve sapere come gestire le coppie per un set e per una mappa.