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 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.

challenge icon

Aufgabe

Einfach

Erstelle 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
  • n Ganzzahlen, die die zu sortierenden Elemente darstellen
  • Ein Zeichen order, das die Sortierreihenfolge darstellt (A für aufsteigend, D für absteigend)

Dein Programm sollte:

  1. Einen std::vector<int> erstellen und ihn mit den Eingabezahlen füllen
  2. std::sort aus dem Header <algorithm> mit einem Lambda-Ausdruck verwenden, um den Vektor zu sortieren
  3. Das Lambda sollte zwei ganzzahlige Parameter übernehmen und einen booleschen Wert zurückgeben
  4. Abhängig vom Zeichen für die Reihenfolge die passende Vergleichslogik im Lambda implementieren
  5. Jedes Element des sortierten Vektors in einer eigenen Zeile ausgeben

Das Sortierverhalten sollte folgendermaßen sein:

  • Wenn order A ist: aufsteigend sortieren (vom kleinsten zum größten Wert)
  • Wenn order D ist: 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;
}
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

Übe selbstständig: Online-C++-Compiler