Smorting di elementi in un set C ++

Smorting di elementi in un set C ++
Un esempio di un set è: st = 'e', 'a', 'd', 'b', 'c'

I caratteri di input qui sono non prestiti. Questo set può essere creato con la seguente dichiarazione:

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

Questo è un insieme di caratteri. È possibile avere una serie di un altro tipo. Qualunque cosa sia il caso da eseguire la codifica set, la libreria set C ++ deve essere inclusa nel programma. Considera il seguente programma:

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

setst = 'e', 'a', 'd', 'b', 'c';
per (set :: iterator iter = st.inizio(); iter != st.FINE(); iter ++)
cout<< *iter<< ", ";
cout<restituzione 0;

L'output è:

A, B, C, D, E,

L'output viene ordinato ascendente quando l'ingresso non è stato ordinato. Dopo che gli elementi sono stati inseriti in un set, vengono ordinati. Con l'impostazione predefinita, come nel programma sopra, l'ordinamento è ascendente.

Il programma di cui sopra è iniziato con l'inclusione della libreria iostream. Questo è necessario per l'uso con il terminale (console). La riga successiva è un'altra direttiva che include la libreria impostata. La linea dopo non è una direttiva. È una dichiarazione che termina con un punto e virgola che insiste sul fatto che qualsiasi nome non preceduto da "std:" è dallo spazio dei nomi standard.

Le linee di intestazione sono seguite dalla funzione C ++ main (). La prima dichiarazione nella funzione principale dichiara il set. Il secondo segmento di codice visualizza i valori del set, che dovrebbero essere sottoposti a ordinamento interno, da C++.

Avendo set ordinato ascendente

Nell'assenza di nomi standard, la sintassi per costruire un set è in realtà:

modello, Classe Allocator = allocatore> set di classi;

Ci sono tre specializzazioni di modelli qui. Se l'ultimo non viene dato dal programmatore, il valore predefinito viene scelto da c++. Se l'ultimo e il secondo non sono dati dal programmatore, vengono scelti i loro valori predefiniti. Il valore predefinito per la seconda specializzazione è "inferiore", il che significa, ordinare ascendente. Se omesso, il set è ancora ordinato ascendente. Se presente come "meno", il set viene ordinato ascendente, come mostra il seguente programma:

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

impostatost = 'e', 'a', 'd', 'b', 'c';
per (set :: iterator iter = st.inizio(); iter != st.FINE(); iter ++)
cout<< *iter<< ", ";
cout<restituzione 0;

Si noti che "char" è al posto di "chiave" in "meno". L'output è:

A, B, C, D, E,

ordinato ascendente. Il programma inizia con l'inclusione della libreria iostream. Questo è necessario per l'uso con il terminale (console). La riga successiva è un'altra direttiva che include la libreria impostata. La linea dopo non è una direttiva. È una dichiarazione che termina con un punto e virgola che insiste sul fatto che qualsiasi nome non preceduto da "std:" è dallo spazio dei nomi standard.

Le linee di intestazione sono seguite dalla funzione C ++ main (). La prima affermazione nella funzione principale dichiara il set usando "meno" come seconda specializzazione del modello. Il secondo segmento di codice visualizza i valori del set, che dovrebbero essere sottoposti a ordinamento interno in modo appropriato, da C++.

Avendo il set ordinato discendente

Per avere un set risolto in declino, la seconda specializzazione deve essere inclusa. È "maggiore", dove "chiave" viene sostituito dal tipo di dati. Meno e più sono funzioni predefinite nella libreria set. Il seguente programma si traduce in un set che viene risolto in discrezione:

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

impostatost = 'e', 'a', 'd', 'b', 'c';
per (set :: iterator iter = st.inizio(); iter != st.FINE(); iter ++)
cout<< *iter<< ", ";
cout<restituzione 0;

L'output è:

E, d, c, b, a,

ordinato discendente. Il programma inizia con l'inclusione della libreria iostream. Questo è necessario per l'uso con il terminale (console). La riga successiva è un'altra direttiva che include la libreria impostata. La linea dopo non è una direttiva. È una dichiarazione che termina con un punto e virgola, insistendo sul fatto che qualsiasi nome non preceduto da "std:" è dello spazio dei nomi standard.

Le linee di intestazione sono seguite dalla funzione C ++ main (). La prima affermazione nella funzione principale dichiara il set usando "maggiore" come seconda specializzazione del modello. Il secondo segmento di codice visualizza i valori del set, che dovrebbero essere sottoposti a ordinamento interno in modo appropriato, da C++.

Osservatori

Le sintassi per gli osservatori set sono:

key_compare key_comp () const;

E

value_compare value_comp () const;
key_compare key_comp () const
Considera il seguente segmento di codice:
impostato> st = 'e', 'a', 'd', 'b', 'c';
bool bl = st.key_comp () ('c', 'd');
cout << bl << endl;

L'output è: 1, per vero.

key_comp () è una funzione membro della classe set. Non ci è argomentazione. Restituisce un oggetto funzione che è una funzione che prende due argomenti. L'oggetto funzione (chiamata) è identificato nella seconda istruzione sopra come "ST.key_comp () () ". I suoi argomenti dovrebbero essere elementi del set dopo l'ordinamento interno in base alla specializzazione del modello di confronto.

Se il suo primo argomento arriva per primo nel set dopo l'ordinamento interno, l'oggetto funzione tornerà vero, altrimenti, restituirà False. Tutto ciò che è codificato nella seconda istruzione sopra.

Se la specializzazione del modello di confronto fosse stata "maggiore", allora l'output sarebbe stato 0, per False.

value_compare value_comp () const;

Ciò riguarda i valori dell'insieme di coppie chiave/valore - vedi più avanti.

Conclusione

Dopo che gli elementi sono stati inseriti in un set in C ++, vengono immediatamente ordinati internamente. Se la specializzazione del modello di confronto è "inferiore", che è l'impostazione predefinita e può essere omessa, l'ordinamento verrà eseguito ascendente. Se è "maggiore", l'ordinamento verrà fatto discendente. La "chiave" in queste espressioni è sostituita dal tipo di valori nel set. I valori sono di un tipo.

Quindi, un set non ha bisogno di una funzione membro di ordinamento perché i valori sono sempre ordinati. Quando un set viene creato con alcuni elementi iniziali, questi elementi vengono ordinati. Qualsiasi inserto di qualsiasi elemento dopo ciò provoca il riaffitto. I valori di un set come quello sopra descritto sono chiamati tasti. Tuttavia, alcuni set possono avere coppie chiave/valore - vedi più avanti.