Lambda Sort
Teil des Abschnitts Logik & Ablauf der C++-Journey von Coddy. Lektion 47 von 56.
Die C++-Standardbibliothek bietet eine leistungsstarke Funktion namens std::sort aus dem <algorithm> Header, die Container wie Vektoren sortieren kann.
Standardmäßig ordnet std::sort die Elemente in aufsteigender Reihenfolge an (vom kleinsten zum größten). Du kannst dieses Verhalten jedoch anpassen, indem du einen Lambda-Ausdruck angibst, der festlegt, wie die Elemente verglichen werden:
#include <vector>
#include <algorithm>
std::vector<int> numbers = {5, 2, 8, 1, 9};
// In absteigender Reihenfolge mit einer Lambda sortieren
std::sort(numbers.begin(), numbers.end(), [](int a, int b) {
return a > b; // Gib true zurück, wenn a vor b kommen soll
});Die Lambda-Funktion nimmt zwei Parameter entgegen, die die verglichenen Elemente darstellen, und gibt true zurück, wenn das erste Element im sortierten Ergebnis vor dem zweiten stehen soll. Für die absteigende Reihenfolge geben wir true zurück, wenn a > b gilt, wodurch größere Zahlen zuerst platziert werden.
Dies zeigt, wie Lambdas es einfach machen, Standardbibliotheksfunktionen anzupassen, ohne separate Vergleichsfunktionen zu schreiben, wodurch Ihre Sortierlogik genau dort bleibt, wo Sie sie benötigen.
Aufgabe
EinfachErstelle ein Programm, das eine benutzerdefinierte Sortierung mit Lambda-Ausdrücken und std::sort demonstriert. Diese Herausforderung testet dein Verständnis dafür, wie du Lambda-Funktionen verwendest, um eine benutzerdefinierte Vergleichslogik zum Sortieren von Containern zu definieren.
Die folgenden Eingaben werden bereitgestellt:
- Eine Ganzzahl
n, die die Anzahl der Elemente im Vektor darstellt nGanzzahlen, die die zu sortierenden Elemente darstellen- Ein Zeichen
order, das die Sortierreihenfolge darstellt (Afür aufsteigend,Dfür absteigend)
Dein Programm sollte:
- Einen
std::vector<int>erstellen und ihn mit den Eingabezahlen füllen std::sortaus dem Header<algorithm>mit einem Lambda-Ausdruck verwenden, um den Vektor zu sortieren- Das Lambda sollte zwei ganzzahlige Parameter übernehmen und einen booleschen Wert zurückgeben
- Abhängig vom Zeichen für die Reihenfolge die passende Vergleichslogik im Lambda implementieren
- Jedes Element des sortierten Vektors in einer eigenen Zeile ausgeben
Das Sortierverhalten sollte folgendermaßen sein:
- Wenn
orderAist: aufsteigend sortieren (vom kleinsten zum größten Wert) - Wenn
orderDist: absteigend sortieren (vom größten zum kleinsten Wert)
Verwende das folgende exakte Ausgabeformat:
[first_sorted_element]
[second_sorted_element]
...
[last_sorted_element]Denke daran, dass std::sort drei Parameter übernimmt: den Anfangsiterator, den Enditerator und eine Vergleichsfunktion. Verwende vector.begin() und vector.end() für die Iteratoren. Die Lambda-Vergleichsfunktion sollte true zurückgeben, wenn der erste Parameter im sortierten Ergebnis vor dem zweiten Parameter stehen soll. Für die aufsteigende Reihenfolge gib a < b zurück; für die absteigende Reihenfolge a > b.
Probier es selbst
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
// Eingabe lesen
int n;
cin >> n;
vector<int> numbers(n);
for (int i = 0; i < n; i++) {
cin >> numbers[i];
}
char order;
cin >> order;
// TODO: Schreiben Sie Ihren Code unten
// Verwenden Sie std::sort mit einem Lambda-Ausdruck, um den Vektor zu sortieren
// basierend auf dem Sortierzeichen (A für aufsteigend, D für absteigend)
// Die sortierten Elemente ausgeben
for (int num : numbers) {
cout << num << endl;
}
return 0;
}Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logik & Ablauf
1Pointer und Speicher
Was ist ein Pointer?AdressoperatorDereferenzierungsoperatorNull-PointerPointer und ArraysDynamischer Speicher mit 'new'Speicher freigeben mit 'delete'Zusammenfassung – Pointer-Übung4Maps (Schlüssel-Wert-Paare)
Einführung in std::mapErstellen einer MapWerte abrufen und ändernAuf Schlüssel prüfenPaare entfernenÜber eine Map iterierenZusammenfassung – Wortfrequenz7Fortgeschrittene Funktionen
ReferenzübergabeEinführung in Lambda-AusdrückeLambdas mit ParameternLambdas mit RückgabewertenEinführung in die RekursionRekursive FakultätLambda Sort2Vektoren (Dynamische Arrays)
Einführung in std::vectorEinen Vector erstellenElemente hinzufügenAuf Elemente zugreifenVector-GrößeIterieren mit einer For-SchleifeRange-based For-SchleifeElemente entfernenZusammenfassung – Vector-Operationen3Projekt: Aufgabenlisten-Tool
ProjektübersichtEine Aufgabe hinzufügenÜbe selbstständig: Online-C++-Compiler