Ordinamento con lambda
Fa parte della sezione Logica e flusso del percorso C++ di Coddy. Lezione 47 di 56.
La libreria standard C++ fornisce una potente funzione chiamata std::sort dell'intestazione <algorithm> che può ordinare contenitori come i vettori.
Per impostazione predefinita, std::sort ordina gli elementi in ordine crescente (dal più piccolo al più grande). Tuttavia, puoi personalizzare questo comportamento fornendo un'espressione lambda che definisce come confrontare gli elementi:
#include <vector>
#include <algorithm>
std::vector<int> numbers = {5, 2, 8, 1, 9};
// Ordina in ordine decrescente usando una lambda
std::sort(numbers.begin(), numbers.end(), [](int a, int b) {
return a > b; // Restituisci true se a deve precedere b
});La lambda accetta due parametri che rappresentano gli elementi confrontati e restituisce true se il primo elemento deve precedere il secondo nel risultato ordinato. Per l’ordine decrescente, restituiamo true quando a > b, il che colloca per primi i numeri più grandi.
Questo dimostra come le lambda rendano facile personalizzare le funzioni della libreria standard senza scrivere funzioni di confronto separate, mantenendo la logica di ordinamento proprio dove ti serve.
Sfida
FacileCrea un programma che dimostri l'ordinamento personalizzato usando le espressioni lambda con std::sort. Questa sfida metterà alla prova la tua comprensione di come usare le funzioni lambda per definire una logica di confronto personalizzata per ordinare i contenitori.
Verranno forniti i seguenti input:
- Un intero
nche rappresenta il numero di elementi nel vettore ninteri che rappresentano gli elementi da ordinare- Un carattere
orderche rappresenta l'ordine di ordinamento (Aper crescente,Dper decrescente)
Il tuo programma dovrebbe:
- Creare un
std::vector<int>e popolarlo con i numeri di input - Usare
std::sortdell'header<algorithm>con un'espressione lambda per ordinare il vettore - La lambda dovrebbe accettare due parametri interi e restituire un valore booleano
- In base al carattere che indica l'ordine, implementare nella lambda la logica di confronto appropriata
- Stampare ogni elemento del vettore ordinato su una riga separata
Il comportamento dell'ordinamento dovrebbe essere il seguente:
- Se
orderèA: ordinare in ordine crescente (dal più piccolo al più grande) - Se
orderèD: ordinare in ordine decrescente (dal più grande al più piccolo)
Usa il seguente formato di output esatto:
[first_sorted_element]
[second_sorted_element]
...
[last_sorted_element]Ricorda che std::sort accetta tre parametri: l'iteratore iniziale, l'iteratore finale e una funzione di confronto. Usa vector.begin() e vector.end() per gli iteratori. La funzione lambda di confronto dovrebbe restituire true se il primo parametro deve precedere il secondo parametro nel risultato ordinato. Per l'ordine crescente, restituisci a < b; per l'ordine decrescente, restituisci a > b.
Provalo tu
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
// Leggi l'input
int n;
cin >> n;
vector<int> numbers(n);
for (int i = 0; i < n; i++) {
cin >> numbers[i];
}
char order;
cin >> order;
// TODO: Scrivi il tuo codice qui sotto
// Usa std::sort con un'espressione lambda per ordinare il vettore
// in base al carattere order (A per ordine crescente, D per ordine decrescente)
// Visualizza gli elementi ordinati
for (int num : numbers) {
cout << num << endl;
}
return 0;
}Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Logica e flusso
1Puntatori e memoria
Che cos'è un puntatore?Operatore indirizzoOperatore di dereferenziazionePuntatori nulliPuntatori e arrayMemoria dinamica con 'new'Liberare la memoria con 'delete'Riepilogo - Esercizi sui puntatori4Mappe (coppie chiave-valore)
Introduzione a std::mapCreare una mappaAccedere ai valori e modificarliVerificare la presenza di chiaviRimuovere coppieIterare su una mappaRiepilogo - Frequenza delle parole7Funzioni avanzate
Passaggio per riferimentoIntroduzione alle espressioni lambdaLambda con parametriLambda con valori di ritornoIntroduzione alla ricorsioneFattoriale ricorsivoOrdinamento con lambda2Vettori (array dinamici)
Introduzione a std::vectorCreare un vettoreAggiungere elementiAccedere agli elementiDimensione del vettoreIterare con un ciclo forCiclo for basato su intervalloRimuovere elementiRiepilogo - Operazioni sui vettori5Progetto: strumento per l’inventario
Configurazione del progettoAggiunta e aggiornamento degli articoli3Progetto: Strumento per l’elenco delle attività
Panoramica del progettoAggiungere un’attivitàEsercitati da solo: Compilatore C++ online