Lambda ile Sıralama
Coddy'nin C++ Journey'sinin Mantık & Akış bölümünün bir parçası. Ders 47 / 56.
C++ Standart Kütüphanesi, <algorithm> başlığından, vektörler gibi konteynerleri sıralayabilen std::sort adında güçlü bir fonksiyon sağlar.
Varsayılan olarak, std::sort öğeleri artan sırada (küçükten büyüğe) düzenler. Ancak öğelerin nasıl karşılaştırılması gerektiğini tanımlayan bir lambda ifadesi sağlayarak bu davranışı özelleştirebilirsin:
#include <vector>
#include <algorithm>
std::vector<int> numbers = {5, 2, 8, 1, 9};
// Bir lambda kullanarak azalan sırada sırala
std::sort(numbers.begin(), numbers.end(), [](int a, int b) {
return a > b; // a, b'den önce gelmeliyse true döndür
});Lambda, karşılaştırılan öğeleri temsil eden iki parametre alır ve ilk öğe sıralanmış sonuçta ikinciden önce gelmeliyse true döndürür. Azalan sıralama için a > b olduğunda true döndürürüz; bu, büyük sayıların önce gelmesini sağlar.
Bu, lambdaların ayrı karşılaştırma fonksiyonları yazmanıza gerek kalmadan standart kütüphane fonksiyonlarını özelleştirmeyi nasıl kolaylaştırdığını ve sıralama mantığınızı tam olarak ihtiyaç duyduğunuz yerde tutmanızı sağladığını gösterir.
Görev
Kolaystd::sort ile lambda ifadelerini kullanarak özel sıralamayı gösteren bir program oluşturun. Bu meydan okuma, kapsayıcılar için özel karşılaştırma mantığı tanımlamak üzere lambda işlevlerinin nasıl kullanılacağını anladığınızı test edecektir.
Aşağıdaki girdiler sağlanacaktır:
- Vektördeki eleman sayısını temsil eden bir
ntamsayısı - Sıralanacak elemanları temsil eden
ntamsayı - Sıralama düzenini temsil eden bir
orderkarakteri (Aartan,Dazalan sıralama için)
Programınız şunları yapmalıdır:
- Bir
std::vector<int>oluşturun ve girdi sayılarını bununla doldurun - Vektörü sıralamak için lambda ifadesiyle birlikte
<algorithm>başlığındakistd::sortişlevini kullanın - Lambda iki tamsayı parametresi almalı ve bir boolean değer döndürmelidir
- Sıralama karakterine göre lambda içinde uygun karşılaştırma mantığını uygulayın
- Sıralanmış vektörün her elemanını ayrı bir satıra yazdırın
Sıralama davranışı şöyle olmalıdır:
orderAise: artan düzende sıralayın (küçükten büyüğe)orderDise: azalan düzende sıralayın (büyükten küçüğe)
Aşağıdaki tam çıktı biçimini kullanın:
[first_sorted_element]
[second_sorted_element]
...
[last_sorted_element]std::sort işlevinin üç parametre aldığını unutmayın: başlangıç yineleyicisi, bitiş yineleyicisi ve bir karşılaştırma işlevi. Yineleyiciler için vector.begin() ve vector.end() kullanın. Lambda karşılaştırma işlevi, sıralanmış sonuçta ilk parametrenin ikinci parametrenin önünde olması gerekiyorsa true döndürmelidir. Artan sıralama için a < b; azalan sıralama için a > b döndürün.
Kendin dene
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
// Girdiyi oku
int n;
cin >> n;
vector<int> numbers(n);
for (int i = 0; i < n; i++) {
cin >> numbers[i];
}
char order;
cin >> order;
// TODO: Kodunuzu aşağıya yazın
// Vektörü sıralama karakterine göre (artan için A, azalan için D)
// sıralamak için bir lambda ifadesiyle std::sort kullanın
// Sıralanmış öğeleri yazdır
for (int num : numbers) {
cout << num << endl;
}
return 0;
}Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Mantık & Akış bölümündeki tüm dersler
1İşaretçiler ve Bellek
İşaretçi Nedir?Adres OperatörüDereference OperatörüNull İşaretçilerİşaretçiler ve Diziler'new' ile Dinamik Bellek'delete' ile Belleği Serbest BırakmaÖzet - İşaretçi Pratiği4Map'ler (Anahtar-Değer Çiftleri)
std::map'e GirişBir Map OluşturmaDeğerlere Erişme ve DeğiştirmeAnahtar KontrolüÇiftleri KaldırmaMap Üzerinde YinelemeÖzet - Kelime Frekansı7İleri Seviye Fonksiyonlar
Referans ile GeçmeLambda İfadelerine GirişParametreli LambdalarDönüş Değeri Olan LambdalarÖzyinelemeye GirişÖzyinelemeli FaktöriyelLambda ile Sıralama2Vektörler (Dinamik Diziler)
std::vector'a GirişBir Vektör OluşturmaEleman EklemeElemanlara ErişmeVektör BoyutuFor Döngüsü ile YinelemeAralık Tabanlı For DöngüsüEleman SilmeÖzet - Vektör İşlemleri3Proje: Görev Listesi Aracı
Projeye Genel BakışGörev EklemeKendi başına pratik yap: Online C++ derleyicisi