Ordenar cadenas alfabéticamente en C++

Jinku Hu 12 octubre 2023
  1. Utilice el algoritmo std::sort para ordenar cadenas alfabéticamente en C++
  2. Utilice el algoritmo std::sort para ordenar cadenas por longitud en C++
Ordenar cadenas alfabéticamente en C++

Este artículo demostrará varios métodos de cómo ordenar cadenas alfabéticamente en C++.

Utilice el algoritmo std::sort para ordenar cadenas alfabéticamente en C++

std::sort es parte de la biblioteca de algoritmos STL e implementa un método de clasificación genérico para las estructuras basadas en rangos. La función generalmente ordena la secuencia dada usando el operador <; por lo tanto, los objetos de cadena se pueden ordenar alfabéticamente con este comportamiento predeterminado. std::sort toma solo especificadores de rango - el primer y el último iterador de elementos. Tenga en cuenta que no se garantiza que se conserve el orden de elementos iguales.

En el siguiente ejemplo, demostramos el escenario básico, donde el vector de cadenas se ordena e imprime en el flujo 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);
}

Producción :

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

Alternativamente, podemos usar el tercer argumento opcional en el método std::sort para especificar la función de comparación exacta. En este caso, reimplementamos el ejemplo de código anterior para comparar las últimas letras de las cadenas y ordenarlas en consecuencia. Observe que la función de comparación debe tener dos argumentos y devolver un valor bool. El siguiente ejemplo utiliza la expresión lambda para actuar como función de comparación, y utiliza la función incorporada back para recuperar las últimas letras de las cadenas.

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

Producción :

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

Utilice el algoritmo std::sort para ordenar cadenas por longitud en C++

Otro caso útil para ordenar el vector de cadenas es por su longitud. Usaremos la misma estructura de la función lambda que el código de ejemplo anterior, simplemente cambiando el método back por el size. Sin embargo, tenga en cuenta que esa función de comparación no debe modificar los objetos que se le pasan.

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

Producción :

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

Artículo relacionado - C++ Sorting