Tri des éléments dans un ensemble C ++

Tri des éléments dans un ensemble C ++
Un exemple d'un ensemble est: st = 'e', 'a', 'd', 'b', 'c'

Les caractères d'entrée ici ne sont pas triés. Cet ensemble peut être créé avec l'énoncé suivant:

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

Ceci est un ensemble de caractères. Il est possible d'avoir un ensemble d'un autre type. Quel que soit le cas à faire du codage. Considérez le programme suivant:

#inclure
#inclure
Utilisation de Namespace Std;
int main()

setst = 'e', 'a', 'd', 'b', 'c';
pour (set :: iterator iter = st.commencer(); iter != st.fin(); iter ++)
couter<< *iter<< ", ";
couter<retour 0;

La sortie est:

A, B, C, D, E,

La sortie est triée en montant lorsque l'entrée n'a pas été triée. Une fois les éléments insérés dans un ensemble, ils se sont triés. Avec paramètre par défaut, comme dans le programme ci-dessus, le tri.

Le programme ci-dessus a commencé avec l'inclusion de la bibliothèque iOStream. Ceci est nécessaire pour être utilisé avec le terminal (console). La ligne suivante est une autre directive qui comprend la bibliothèque définie. La ligne après n'est pas une directive. C'est une déclaration se terminant par un point-virgule insistant sur le fait que tout nom non précédé de «std ::» provient de l'espace de noms standard.

Les lignes d'en-tête sont suivies par la fonction C ++ Main (). La première instruction de la fonction principale déclare l'ensemble. Le deuxième segment de code affiche les valeurs de l'ensemble, qui auraient dû subir un tri interne, par c++.

Ayant réglé trié ascendant

Dans l'espace de noms standard, la syntaxe pour construire un ensemble est en fait:

modèle, Class Allocator = Allocator> set de classe;

Il y a trois spécialisations de modèle ici. Si le dernier n'est pas donné par le programmeur, la valeur par défaut est choisie par c++. Si la dernière et la deuxième n'est pas donnée par le programmeur, leurs valeurs par défaut sont choisies. La valeur par défaut de la deuxième spécialisation est «moins», ce qui signifie, trier ascendant. S'il est omis, l'ensemble est toujours trié. Si elle est présente comme «moins», l'ensemble est trié ascendant, comme le montre le programme suivant:

#inclure
#inclure
Utilisation de Namespace Std;
int main()

ensemblest = 'e', 'a', 'd', 'b', 'c';
pour (set :: iterator iter = st.commencer(); iter != st.fin(); iter ++)
couter<< *iter<< ", ";
couter<retour 0;

Notez que «char» est à la place de «clé» dans «moins». La sortie est:

A, B, C, D, E,

trié ascendant. Le programme commence par l'inclusion de la bibliothèque iOStream. Ceci est nécessaire pour être utilisé avec le terminal (console). La ligne suivante est une autre directive qui comprend la bibliothèque définie. La ligne après n'est pas une directive. C'est une déclaration se terminant par un point-virgule insistant sur le fait que tout nom non précédé de «std ::» provient de l'espace de noms standard.

Les lignes d'en-tête sont suivies par la fonction C ++ Main (). La première instruction de la fonction principale déclare l'ensemble en utilisant «moins» comme deuxième spécialisation du modèle. Le deuxième segment de code affiche les valeurs de l'ensemble, qui auraient dû subir le tri interne de manière appropriée, par C++.

Après avoir réglé descendant

Pour avoir un ensemble trié descendant, la deuxième spécialisation doit être incluse. Il est «plus grand», où «la clé» est remplacée par le type de données. Moins et plus sont des fonctions prédéfinies dans la bibliothèque SET. Le programme suivant se traduit par un ensemble qui est trié descendant:

#inclure
#inclure
Utilisation de Namespace Std;
int main()

ensemblest = 'e', 'a', 'd', 'b', 'c';
pour (set :: iterator iter = st.commencer(); iter != st.fin(); iter ++)
couter<< *iter<< ", ";
couter<retour 0;

La sortie est:

E, D, C, B, A,

trié descendant. Le programme commence par l'inclusion de la bibliothèque iOStream. Ceci est nécessaire pour être utilisé avec le terminal (console). La ligne suivante est une autre directive qui comprend la bibliothèque définie. La ligne après n'est pas une directive. C'est une déclaration se terminant par un point-virgule, insistant sur le fait que tout nom non précédé de «std ::» est de l'espace de noms standard.

Les lignes d'en-tête sont suivies par la fonction C ++ Main (). La première instruction de la fonction principale déclare l'ensemble en utilisant «plus grand» comme deuxième spécialisation du modèle. Le deuxième segment de code affiche les valeurs de l'ensemble, qui auraient dû subir le tri interne de manière appropriée, par C++.

Observateurs

Les syntaxes des observateurs définis sont:

key_compare key_comp () const;

et

Value_Compare Value_Comp () const;
key_compare key_comp () const
Considérez le segment de code suivant:
ensemble> st = 'e', 'a', 'd', 'b', 'c';
bool bl = st.key_comp () ('c', 'd');
couter << bl << endl;

La sortie est: 1, pour vrai.

key_comp () est une fonction membre de la classe set. Il ne prend aucun argument. Il renvoie un objet de fonction qui est une fonction qui prend deux arguments. L'objet de fonction (appel) est identifié dans la deuxième instruction ci-dessus comme «St.key_comp () () ". Ses arguments devraient être des éléments de l'ensemble après le tri interne basé sur la spécialisation du modèle de comparaison.

Si son premier argument arrive en premier dans l'ensemble après le tri interne, alors l'objet de fonction renvoie vrai, sinon il renverra faux. Tout ce qui est codé dans la deuxième instruction ci-dessus.

Si la spécialisation du modèle de comparaison avait été «plus grande», alors la sortie aurait été 0, pour false.

Value_Compare Value_Comp () const;

Cela concerne les valeurs de l'ensemble des paires de clés / valeur - voir plus tard.

Conclusion

Une fois les éléments insérés dans un ensemble en C ++, ils sont immédiatement triés en interne. Si la spécialisation du modèle de comparaison est «moins», ce qui est la valeur par défaut, et peut être omis, le tri sera fait. S'il est «plus grand», alors le tri se fera descendant. «Clé» dans ces expressions est remplacé par le type de valeurs dans l'ensemble. Les valeurs sont d'un seul type.

Ainsi, un ensemble n'a pas besoin d'une fonction de membre de tri car les valeurs sont toujours triées. Lorsqu'un ensemble est créé avec certains éléments initiaux, ces éléments sont triés. Tout insert de n'importe quel élément après cela provoque une ré-tri. Les valeurs d'un ensemble comme celle décrite ci-dessus sont appelées clés. Cependant, certains ensembles peuvent avoir des paires de clés / valeur - voir plus tard.