Trier les chaînes par ordre alphabétique en C++
-
Utilisez l’algorithme
std::sort
pour trier les chaînes par ordre alphabétique en C++ -
Utilisez l’algorithme
std::sort
pour trier les chaînes par longueur en C++
Cet article présente plusieurs méthodes de tri alphabétique des chaînes en C++.
Utilisez l’algorithme std::sort
pour trier les chaînes par ordre alphabétique en C++
std::sort
fait partie de la bibliothèque d’algorithmes STL et implémente une méthode de tri générique pour les structures basées sur les plages. La fonction trie généralement la séquence donnée en utilisant l’opérateur <
; ainsi, les objets chaîne peuvent être triés par ordre alphabétique avec ce comportement par défaut. std::sort
ne prend que des spécificateurs de plage - le premier et le dernier itérateur d’élément. Notez que l’ordre des éléments égaux n’est pas garanti d’être préservé.
Dans l’exemple suivant, nous montrons le scénario de base, où le vector
de chaînes est trié et imprimé dans le flux cout
.
#include <iostream>
#include <string>
#include <vector>
using std::cout;
using std::endl;
using std::sort;
using std::string;
using std::vector;
int main() {
vector<string> arr = {
"raid", "implementation", "states", "all", "the",
"requirements", "parameter", "a", "and", "or",
"execution", "participate"};
for (const auto &item : arr) {
cout << item << "; ";
}
cout << endl;
sort(arr.begin(), arr.end());
for (const auto &item : arr) {
cout << item << "; ";
}
cout << endl;
exit(EXIT_SUCCESS);
}
Production:
raid; implementation; states; all; the; requirements; parameter; a; and; or; execution; participate;
a; all; and; execution; implementation; or; parameter; participate; raid; requirements; states; the;
Alternativement, nous pouvons utiliser le troisième argument optionnel dans la méthode std::sort
pour spécifier la fonction de comparaison exacte. Dans ce cas, nous avons réimplémenté l’exemple de code précédent pour comparer les dernières lettres des chaînes et les trier en conséquence. Notez que la fonction de comparaison doit avoir deux arguments et retourner une valeur bool
. L’exemple suivant utilise l’expression lambda pour agir comme fonction de comparaison, et il utilise la fonction intégrée back
pour récupérer les dernières lettres des chaînes.
#include <iostream>
#include <string>
#include <vector>
using std::cout;
using std::endl;
using std::sort;
using std::string;
using std::vector;
int main() {
vector<string> arr = {
"raid", "implementation", "states", "all", "the",
"requirements", "parameter", "a", "and", "or",
"execution", "participate"};
for (const auto &item : arr) {
cout << item << "; ";
}
cout << endl;
sort(arr.begin(), arr.end(),
[](string &s1, string &s2) { return s1.back() < s2.back(); });
for (const auto &item : arr) {
cout << item << "; ";
}
cout << endl;
exit(EXIT_SUCCESS);
}
Production:
raid; implementation; states; all; the; requirements; parameter; a; and; or; execution; participate;
a; raid; and; the; participate; all; implementation; execution; parameter; or; states; requirements;
Utilisez l’algorithme std::sort
pour trier les chaînes par longueur en C++
Un autre cas utile pour trier le vecteur de chaînes est par leur longueur. Nous utiliserons la même structure de la fonction lambda que l’exemple de code précédent, en changeant simplement la méthode back
par la size
. Attention cependant, cette fonction de comparaison ne doit pas modifier les objets qui lui sont passés.
#include <iostream>
#include <string>
#include <vector>
using std::cout;
using std::endl;
using std::sort;
using std::string;
using std::vector;
int main() {
vector<string> arr = {
"raid", "implementation", "states", "all", "the",
"requirements", "parameter", "a", "and", "or",
"execution", "participate"};
for (const auto &item : arr) {
cout << item << "; ";
}
cout << endl;
sort(arr.begin(), arr.end(),
[](string &s1, string &s2) { return s1.size() < s2.size(); });
for (const auto &item : arr) {
cout << item << "; ";
}
cout << endl;
exit(EXIT_SUCCESS);
}
Production:
raid; implementation; states; all; the; requirements; parameter; a; and; or; execution; participate;
a; or; all; the; and; raid; states; parameter; execution; participate; requirements; implementation;
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook