Trier les chaînes par ordre alphabétique en C++

Jinku Hu 12 octobre 2023
  1. Utilisez l’algorithme std::sort pour trier les chaînes par ordre alphabétique en C++
  2. Utilisez l’algorithme std::sort pour trier les chaînes par longueur en C++
Trier les chaînes par ordre alphabétique 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;
Auteur: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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

Article connexe - C++ Sorting