Tri des vecteurs C ++

Tri des vecteurs C ++
Le vecteur C ++ est comme un tableau avec des fonctions membres (méthodes). La longueur du vecteur peut être augmentée ou diminuer dans l'exécution du programme. Le vecteur a de nombreuses fonctions membres. Parmi toutes ces fonctions membres, non-sorte le vecteur. Cependant, C ++ a une bibliothèque appelée la bibliothèque d'algorithme. Cette bibliothèque a de nombreuses fonctions algorithmiques à usage général. L'un d'eux est la fonction tri (). Cette fonction peut être utilisée pour trier les conteneurs C ++ tels que le vecteur. Toutes les valeurs d'un vecteur sont des valeurs du même type.

Un programmeur peut écrire sa propre fonction (). Cependant, la fonction tri () de la bibliothèque d'algorithme est susceptible de mieux fonctionner que ce que le programmeur ordinaire écrit.

La fonction tri () peut trier les valeurs d'un vecteur dans l'ordre croissant ou dans l'ordre descendant. Pour trier un vecteur, la bibliothèque d'algorithmes doit être incluse. La bibliothèque vectorielle doit également être incluse. Le début du programme devrait être quelque chose comme:

#inclure
#inclure
#inclure
Utilisation de Namespace Std;

Le vecteur est en fait une classe, à partir de laquelle les objets vectoriels peuvent être créés. Avec la section supérieure ci-dessus du programme, un vecteur à tri, peut être créé comme suit:

vecteur vtr = 'z', 'x', 'c', 'v', 'b', 'n', 'm', 'a', 's', 'd';

Le nom de la classe est un vecteur. Le nom de l'objet instancié est vtr.

Dans ce tutoriel, le codage de tri se fait dans la fonction c ++ main (). Ce tutoriel explique comment trier un vecteur C ++ en utilisant le vecteur ci-dessus, VTR.

Contenu de l'article

  • Tri par défaut
  • Tri dans l'ordre descendant
  • Fonction de comparaison personnalisée
  • Autres types de données
  • Conclusion

Tri par défaut

Le tri par défaut trie dans l'ordre croissant. La syntaxe pour ceci est:

modèle
Sort vide (RandomAccessInterator d'abord, RandomAccessiterator en dernier);

Trier tout le vecteur

Le code suivant trie tout le vecteur:

trier (vtr.begin (), vtr.fin());
pour (int i = 0; icouter<couter<La liste non triée est:

Z, X, C, V, B, N, M, A, S, D

La liste triée est:

A, B, C, D, M, N, S, V, X, Z,

qui est correct. Si le tri n'est pas correct, alors le défaut est celui du programmeur et non celui de la fonction tri ().

Le RandomAccessiterator est intrinsèque. vtr.begin () Renvoie un itérateur qui pointe vers le premier élément, et vtr.end () renvoie un autre itérateur du même type qui pointe juste après le dernier élément. Il n'est donc pas nécessaire d'instancier un vecteur indiquant, RandomAccessiterator. De cette façon, toute la liste est triée.

Trier une plage d'ordre croissant

La liste non triée ci-dessus compte dix éléments avec des index:

0, 1, 2, 3, 4, 5, 6, 7, 8, 9

Pour trier uniquement les éléments de la position 4, qui est l'index, 3 = 4 - 1, à la position 9, qui est l'index, 8 = 9 - 1, ajouter 3 à Vtr.begin () pour avoir le premier itérateur, puis ajouter 8 à Vtr.begin () pour avoir le dernier itérateur, pour la fonction tri (). Le 9e L'élément de l'index 8 ne sera pas inclus dans le tri. C'est-à-dire que le dernier élément indiqué dans la plage choisie est exclu pour le tri. Le code suivant illustre ceci:

trier (vtr.begin () + 3, vtr.begin () + 8);
pour (int i = 0; icouter<couter<La liste non triée est:

Z, X, C, V, B, N, M, A, S, D
[/ c] c
La liste triée est:
[cc lang = "text" width = "100%" height = "100%" échappé = "true" theme = "Blackboard" Nowrap = "0"]
Z, X, C, A, B, M, N, V, S, D,

Les éléments des positions 4, 5, 6, 7, 8 ont été triés. L'élément du 9e La position n'a pas été incluse dans le type. Ces positions correspondent aux indices 3, 4, 5, 6, 7. L'élément de l'index 8 n'a pas été inclus dans le type.

Donc, pour trier une gamme, identifiez les premier et dernier éléments de la gamme, pas nécessairement de toute la liste. Ajouter l'index du premier élément à l'itérateur Begin (). Ajouter l'index du dernier élément, toujours à l'itérateur Begin (). N'oubliez pas que le dernier élément de la gamme ne sera pas inclus dans le type, mais le premier élément de la gamme sera inclus.

L'ajout d'un index à un itérateur est possible car l'ajout d'un nombre est le même que l'intégration de l'itérateur ce même nombre de fois. L'incrémentation d'un itérateur fait une fois un point vers l'élément suivant.

Tri dans l'ordre descendant

La syntaxe est:

modèle
VOID SORT (RandomAccessiterator First, RandomAccessiterator Last, Compare Comp);

Cela diffère de la syntaxe ci-dessus avec la présence de «comparer comp». Comp est un pointeur de fonction ou un objet de fonction. Comp décide en fait si le tri doit être ascendant ou descendant. Son absence est le cas par défaut, ce qui signifie descendant.

Trier toute la liste en ordre décroissant

Le code suivant trie tout le vecteur ci-dessus dans l'ordre descendant:

trier (vtr.begin (), vtr.end (), plus grand());
pour (int i = 0; icouter<couter<La liste non triée est:

Z, X, C, V, B, N, M, A, S, D

Le vecteur trié par ordre décroissant est:

Z, X, V, S, N, M, D, C, B, A,

Notez l'utilisation de «plus grand ()» à la place de la comp.

L'opposé de plus grand () est moins (), qui est la valeur par défaut (ascendant), et n'a pas à être dactylographié.

Trier une gamme d'ordre descendant

Une gamme peut être triée par ordre décroissant ainsi qu'en ordre ascendant. Le code suivant trie le 4e au 9e élément sans inclure le 9e élément; et descendant.

trier (vtr.begin () + 3, vtr.begin () + 8, plus grand());
pour (int i = 0; icouter<couter<La liste non triée est:

Z, X, C, V, B, N, M, A, S, D

Le vecteur avec sa gamme choisie, trié par ordre décroissant, est:

Z, X, C, V, N, M, B, A, S, D,

Fonction de comparaison personnalisée

Le programme suivant a une fonction de comparaison personnalisée pour le tri ascendant:

#inclure
#inclure
#inclure
Utilisation de Namespace Std;
vectorvtr = 'z', 'x', 'c', 'v', 'b', 'n', 'm', 'a', 's', 'd';
bool compare (char a, char b)
retour (A < b);

int main()

trier (vtr.begin (), vtr.end (), comparer);
pour (int i = 0; icouter<couter<retour 0;

La fonction pour faire la comparaison est appelée compare. Il renvoie un bool. Il a deux paramètres, A et B, du même type, que le type d'élément vectoriel. Il renvoie vrai si A est inférieur à B et faux sinon. Le nom de cette fonction est le troisième argument de l'appel de fonction tri (). Dans ce programme, comparer est le même que moins (). Certains autres noms au lieu de comparer peuvent être utilisés.

La liste non triée est:

Z, X, C, V, B, N, M, A, S, D

La liste triée est:

A, B, C, D, M, N, S, V, X, Z,

Bien sûr, la fonction de comparaison personnalisée peut être utilisée pour une gamme. Le programme suivant illustre ceci:

#inclure
#inclure
#inclure
Utilisation de Namespace Std;
vectorvtr = 'z', 'x', 'c', 'v', 'b', 'n', 'm', 'a', 's', 'd';
bool compare (char a, char b)
retour (A < b);

int main()

trier (vtr.begin () + 3, vtr.begin () + 8, comparer);
pour (int i = 0; icouter<couter<retour 0;

La liste non triée est:

Z, X, C, V, B, N, M, A, S, D

La liste triée est:

Z, X, C, A, B, M, N, V, S, D,

La fonction de comparaison peut être codée pour la descendance. Le programme suivant illustre ceci:

#inclure
#inclure
#inclure
Utilisation de Namespace Std;
vectorvtr = 'z', 'x', 'c', 'v', 'b', 'n', 'm', 'a', 's', 'd';
bool compare (char a, char b)
return (a> b);

int main()

trier (vtr.begin (), vtr.end (), comparer);
pour (int i = 0; icouter<couter<retour 0;

Changez juste (A B).

La liste non triée est:

Z, X, C, V, B, N, M, A, S, D

La liste triée est:

Z, X, V, S, N, M, D, C, B, A,

La fonction de comparaison personnalisée peut être utilisée pour une gamme, en ordre décroissant. Le programme suivant illustre ceci:

#inclure
#inclure
#inclure
Utilisation de Namespace Std;
vectorvtr = 'z', 'x', 'c', 'v', 'b', 'n', 'm', 'a', 's', 'd';
bool compare (char a, char b)
return (a> b);

int main()

trier (vtr.begin () + 3, vtr.begin () + 8, comparer);
pour (int i = 0; icouter<couter<retour 0;

La liste non triée est:

Z, X, C, V, B, N, M, A, S, D

Le vecteur avec sa gamme choisie, trié par ordre décroissant, est:

Z, X, C, V, N, M, B, A, S, D,

Autres types de données

D'autres types de données peuvent être triés à l'aide de leurs types. Par exemple, si le type de données int doit être trié, alors «int» serait utilisé pour créer le vecteur et dans la fonction comparement intégrée ou personnalisée. Si le type de données est dans une bibliothèque, alors l'en-tête de la bibliothèque doit être inclus dans le programme, comme dans le cas de la chaîne ci-dessous:

#inclure
#inclure
#inclure
#inclure
Utilisation de Namespace Std;
vectorvtr = "ze", "xe", "ce", "ve", "be", "ne", "me", "ae", "se", "de";
int main()

trier (vtr.begin (), vtr.end (), supérieur ());
pour (int i = 0; icouter<couter<retour 0;

La liste non triée est:

Ze, xe, ce, ve, be, ne, moi, ae, se, de

La liste triée est:

Ze, xe, ve, se, ne, moi, de, ce, be, ae,

Conclusion

C ++ est livré avec la bibliothèque d'algorithme qui a une fonction tri (). Cette fonction prend deux ou trois arguments dans son utilisation normale. Le premier argument est dans lequel la liste vectorielle, le type doit commencer. Le deuxième argument est dans lequel la liste vectorielle, le type devrait se terminer. Le troisième argument détermine si le tri doit être fait dans l'ordre croissant ou dans l'ordre décroissant.