Ordina le stringhe in ordine alfabetico in C++
-
Usa l’algoritmo
std::sort
per ordinare le stringhe alfabeticamente in C++ -
Usa l’algoritmo
std::sort
per ordinare le stringhe in base alla lunghezza 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;
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