Menu
Coddy logo textTech

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 Elemente in aufsteigender Reihenfolge (vom kleinsten zum größten) an. Sie können dieses Verhalten jedoch anpassen, indem Sie einen Lambda-Ausdruck bereitstellen, der definiert, wie Elemente verglichen werden sollen:

#include <vector>
#include <algorithm>

std::vector<int> numbers = {5, 2, 8, 1, 9};

// In absteigender Reihenfolge mit einem Lambda sortieren
std::sort(numbers.begin(), numbers.end(), [](int a, int b) {
    return a > b;  // Gibt true zurück, wenn a vor b stehen soll
});

Der Lambda-Ausdruck nimmt zwei Parameter entgegen, die die zu vergleichenden Elemente darstellen, und gibt true zurück, wenn das erste Element im sortierten Ergebnis vor dem zweiten stehen soll. Für eine 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.

challenge icon

Aufgabe

Einfach

Erstellen Sie ein Programm, das benutzerdefiniertes Sortieren unter Verwendung von Lambda-Ausdrücken mit std::sort demonstriert. Diese Herausforderung testet Ihr Verständnis dafür, wie Lambda-Funktionen verwendet werden, 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
  • n Ganzzahlen, die die zu sortierenden Elemente darstellen
  • Ein Zeichen order, das die Sortierreihenfolge darstellt (A für aufsteigend, D für absteigend)

Ihr Programm sollte:

  1. Einen std::vector<int> erstellen und ihn mit den eingegebenen Zahlen füllen
  2. std::sort aus dem <algorithm>-Header mit einem Lambda-Ausdruck verwenden, um den Vektor zu sortieren
  3. Das Lambda sollte zwei Ganzzahl-Parameter entgegennehmen und einen booleschen Wert zurückgeben
  4. Basierend auf dem Zeichen für die Reihenfolge die entsprechende Vergleichslogik im Lambda implementieren
  5. Jedes Element des sortierten Vektors in einer separaten Zeile ausgeben

Das Sortierverhalten sollte wie folgt sein:

  • Wenn order gleich A ist: aufsteigend sortieren (vom kleinsten zum größten)
  • Wenn order gleich D ist: absteigend sortieren (vom größten zum kleinsten)

Verwenden Sie das folgende exakte Ausgabeformat:

[first_sorted_element]
[second_sorted_element]
...
[last_sorted_element]

Denken Sie daran, dass std::sort drei Parameter erwartet: den Anfangs-Iterator, den End-Iterator und eine Vergleichsfunktion. Verwenden Sie 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 aufsteigende Reihenfolge geben Sie a < b zurück; für absteigende Reihenfolge geben Sie a > b zurück.

Spickzettel

Die Funktion std::sort aus dem Header <algorithm> sortiert Container wie Vektoren. Standardmäßig sortiert sie in aufsteigender Reihenfolge, aber Sie können das Sortierverhalten mithilfe eines Lambda-Ausdrucks anpassen.

Grundlegende Syntax:

std::sort(container.begin(), container.end(), comparison_lambda);

Das Lambda nimmt zwei Parameter entgegen, die die zu vergleichenden Elemente darstellen, und gibt true zurück, wenn das erste Element im sortierten Ergebnis vor dem zweiten stehen soll.

Beispiel - absteigende Reihenfolge:

#include <algorithm>
#include <vector>

std::vector<int> numbers = {5, 2, 8, 1, 9};

std::sort(numbers.begin(), numbers.end(), [](int a, int b) {
    return a > b;  // Größere Zahlen kommen zuerst
});

Beispiel - aufsteigende Reihenfolge:

std::sort(numbers.begin(), numbers.end(), [](int a, int b) {
    return a < b;  // Kleinere Zahlen kommen zuerst
});

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;
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Logik & Ablauf