Ordina le stringhe in ordine alfabetico in C++

Jinku Hu 12 ottobre 2023
  1. Usa l’algoritmo std::sort per ordinare le stringhe alfabeticamente in C++
  2. Usa l’algoritmo std::sort per ordinare le stringhe in base alla lunghezza in C++
Ordina le stringhe in ordine alfabetico in C++

Questo articolo illustrerà più metodi su come ordinare le stringhe in ordine alfabetico in C++.

Usa l’algoritmo std::sort per ordinare le stringhe alfabeticamente in C++

std::sort fa parte della libreria degli algoritmi STL e implementa un metodo di ordinamento generico per le strutture basate su intervalli. La funzione di solito ordina la sequenza data usando l’operatore <; pertanto, gli oggetti stringa possono essere ordinati alfabeticamente con questo comportamento predefinito. std::sort accetta solo specificatori di intervallo: il primo e l’ultimo elemento iteratori. Si noti che non è garantito che l’ordine degli elementi uguali venga preservato.

Nell’esempio seguente, dimostriamo lo scenario di base, in cui il vettore di stringhe è ordinato e stampato nel flusso 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);
}

Produzione:

raid; implementation; states; all; the; requirements; parameter; a; and; or; execution; participate;
a; all; and; execution; implementation; or; parameter; participate; raid; requirements; states; the;

In alternativa, possiamo usare il terzo argomento opzionale nel metodo std::sort per specificare l’esatta funzione di confronto. In questo caso, abbiamo reimplementato l’esempio di codice precedente per confrontare le ultime lettere delle stringhe e ordinarle di conseguenza. Si noti che la funzione di confronto dovrebbe avere due argomenti e restituire un valore bool. L’esempio successivo utilizza l’espressione lambda per agire come funzione di confronto e utilizza la funzione incorporata back per recuperare le ultime lettere delle stringhe.

#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);
}

Produzione:

raid; implementation; states; all; the; requirements; parameter; a; and; or; execution; participate;
a; raid; and; the; participate; all; implementation; execution; parameter; or; states; requirements;

Usa l’algoritmo std::sort per ordinare le stringhe in base alla lunghezza in C++

Un altro caso utile per ordinare il vettore delle stringhe è in base alla loro lunghezza. Useremo la stessa struttura della funzione lambda del codice di esempio precedente, cambiando semplicemente il metodo back con size. Attenzione però, quella funzione di confronto non deve modificare gli oggetti ad essa passati.

#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);
}

Produzione:

raid; implementation; states; all; the; requirements; parameter; a; and; or; execution; participate;
a; or; all; the; and; raid; states; parameter; execution; participate; requirements; implementation;
Autore: 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