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.
Tantangan
MudahBuat 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
nyang menunjukkan jumlah elemen dalam vector nbilangan bulat yang menunjukkan elemen-elemen yang akan diurutkan- Karakter
orderyang menunjukkan urutan pengurutan (Auntuk urutan naik,Duntuk urutan turun)
Programmu harus:
- Membuat
std::vector<int>dan mengisinya dengan angka input - Menggunakan
std::sortdari header<algorithm>dengan ekspresi lambda untuk mengurutkan vector - Lambda harus menerima dua parameter bilangan bulat dan mengembalikan nilai boolean
- Berdasarkan karakter urutan, menerapkan logika perbandingan yang sesuai dalam lambda
- Mencetak setiap elemen dari vector yang sudah diurutkan pada baris terpisah
Perilaku pengurutan harus sebagai berikut:
- Jika
orderadalahA: urutkan dari yang terkecil ke terbesar - Jika
orderadalahD: 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;
}Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Logika dan Alur
1Pointer dan Memori
Apa Itu Pointer?Operator Address-OfOperator DereferencePointer NullPointer dan ArrayMemori Dinamis dengan 'new'Membebaskan Memori dengan 'delete'Rangkuman: Latihan Pointer4Map (Pasangan Kunci-Nilai)
Mengenal std::mapMembuat MapMengakses dan Mengubah NilaiMemeriksa KunciMenghapus PasanganMelakukan Perulangan pada MapRangkuman: Frekuensi Kata7Fungsi Lanjutan
Pass by ReferencePengenalan Ekspresi LambdaLambda dengan ParameterLambda dengan Nilai KembalianPengenalan RekursiFaktorial RekursifPengurutan dengan Lambda2Vektor (array Dinamis)
Memperkenalkan std::vectorMembuat VektorMenambahkan ElemenMengakses ElemenUkuran VektorIterasi dengan for loopFor loop Berbasis RentangMenghapus ElemenRangkuman: Operasi VektorLatihan sendiri: Compiler C++ online