Menu
CoddyTech

Pengurutan dengan Lambda

Termasuk bagian Logika dan Alur dalam perjalanan C++ di Coddy. Pelajaran 47 dari 56.

Standard Library C++ menyediakan fungsi canggih bernama std::sort dari header <algorithm> yang dapat mengurutkan container seperti vector.

Secara default, std::sort mengurutkan elemen dalam urutan menaik (dari yang terkecil ke terbesar). Namun, kamu bisa menyesuaikan perilaku ini dengan memberikan ekspresi lambda yang menentukan cara elemen harus dibandingkan:

#include <vector>
#include <algorithm>

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

// Urutkan dari terbesar ke terkecil menggunakan lambda
std::sort(numbers.begin(), numbers.end(), [](int a, int b) {
    return a > b;  // Kembalikan true jika a harus berada sebelum b
});

Lambda menerima dua parameter yang mewakili elemen yang dibandingkan dan mengembalikan true jika elemen pertama harus berada sebelum elemen kedua dalam hasil yang diurutkan. Untuk urutan menurun, kita mengembalikan true saat a > b, sehingga angka yang lebih besar berada di awal.

Ini menunjukkan bagaimana lambda memudahkan kamu menyesuaikan fungsi library standar tanpa menulis fungsi perbandingan terpisah, sehingga logika pengurutan tetap berada tepat di tempat yang kamu perlukan.

challenge icon

Tantangan

Mudah

Buat program yang menunjukkan pengurutan kustom menggunakan ekspresi lambda dengan std::sort. Tantangan ini akan menguji pemahamanmu tentang cara menggunakan fungsi lambda untuk menentukan logika perbandingan kustom saat mengurutkan container.

Input berikut akan diberikan:

  • Bilangan bulat n yang menunjukkan jumlah elemen dalam vector
  • n bilangan bulat yang menunjukkan elemen-elemen yang akan diurutkan
  • Karakter order yang menunjukkan urutan pengurutan (A untuk urutan naik, D untuk urutan turun)

Programmu harus:

  1. Membuat std::vector<int> dan mengisinya dengan angka input
  2. Menggunakan std::sort dari header <algorithm> dengan ekspresi lambda untuk mengurutkan vector
  3. Lambda harus menerima dua parameter bilangan bulat dan mengembalikan nilai boolean
  4. Berdasarkan karakter urutan, menerapkan logika perbandingan yang sesuai dalam lambda
  5. Mencetak setiap elemen dari vector yang sudah diurutkan pada baris terpisah

Perilaku pengurutan harus sebagai berikut:

  • Jika order adalah A: urutkan dari yang terkecil ke terbesar
  • Jika order adalah D: urutkan dari yang terbesar ke terkecil

Gunakan format output persis seperti berikut:

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

Ingat bahwa std::sort menerima tiga parameter: iterator awal, iterator akhir, dan fungsi perbandingan. Gunakan vector.begin() dan vector.end() untuk iterator. Fungsi perbandingan lambda harus mengembalikan true jika parameter pertama harus ditempatkan sebelum parameter kedua dalam hasil pengurutan. Untuk urutan naik, kembalikan a < b; untuk urutan turun, kembalikan a > b.

Coba sendiri

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
    // Baca input
    int n;
    cin >> n;
    
    vector<int> numbers(n);
    for (int i = 0; i < n; i++) {
        cin >> numbers[i];
    }
    
    char order;
    cin >> order;
    
    // TODO: Tulis kodemu di bawah ini
    // Gunakan std::sort dengan ekspresi lambda untuk mengurutkan vector
    // berdasarkan karakter urutan (A untuk menaik, D untuk menurun)
    
    // Tampilkan elemen yang sudah diurutkan sebagai output
    for (int num : numbers) {
        cout << num << endl;
    }
    
    return 0;
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Logika dan Alur

Latihan sendiri: Compiler C++ online