Menu
Coddy logo textTech

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 düzende (küçükten büyüğe) sıralar. Ancak, öğelerin nasıl karşılaştırılacağını tanımlayan bir lambda ifadesi sağlayarak bu davranışı özelleştirebilirsiniz:

#include <vector>
#include <algorithm>

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

// Bir lambda kullanarak azalan düzende sırala
std::sort(numbers.begin(), numbers.end(), [](int a, int b) {
    return a > b;  // Eğer a, b'den önce gelmeliyse true döndür
});

Lambda, karşılaştırılan öğeleri temsil eden iki parametre alır ve sıralanan sonuçta ilk öğe ikinciden önce gelmeliyse true döndürür. Azalan sıralama için, büyük sayıları başa yerleştiren a > b durumunda true döndürürüz.

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.

challenge icon

Görev

Kolay

std::sort ile lambda ifadelerini kullanarak özel sıralama yapan bir program oluşturun. Bu görev, sıralama konteynerleri için özel karşılaştırma mantığı tanımlamak amacıyla lambda fonksiyonlarını nasıl kullanacağınızı anlama düzeyinizi test edecektir.

Aşağıdaki girdiler sağlanacaktır:

  • Vektördeki eleman sayısını temsil eden bir tam sayı n
  • Sıralanacak elemanları temsil eden n adet tam sayı
  • Sıralama düzenini temsil eden bir karakter order (artan düzen için A, azalan düzen için D)

Programınız şunları yapmalıdır:

  1. Bir std::vector<int> oluşturun ve bunu girdi sayılarıyla doldurun
  2. Vektörü sıralamak için <algorithm> başlığındaki std::sort fonksiyonunu bir lambda ifadesiyle birlikte kullanın
  3. Lambda, iki tam sayı parametresi almalı ve bir boolean değer döndürmelidir
  4. Sıralama karakterine bağlı olarak, lambada uygun karşılaştırma mantığını uygulayın
  5. Sıralanan vektörün her bir elemanını ayrı bir satıra yazdırın

Sıralama davranışı şu şekilde olmalıdır:

  • Eğer order değeri A ise: artan düzende sıralayın (küçükten büyüğe)
  • Eğer order değeri D ise: azalan düzende sıralayın (büyükten küçüğe)

Aşağıdaki tam çıktı formatını kullanın:

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

std::sort fonksiyonunun üç parametre aldığını unutmayın: başlangıç yineleyicisi (iterator), bitiş yineleyicisi ve bir karşılaştırma fonksiyonu. Yineleyiciler için vector.begin() ve vector.end() kullanın. Lambda karşılaştırma fonksiyonu, sıralanan sonuçta ilk parametrenin ikinci parametreden önce gelmesi gerekiyorsa true döndürmelidir. Artan düzen için a < b; azalan düzen için a > b döndürün.

Kopya kağıdı

<algorithm> başlığındaki std::sort fonksiyonu, vektörler gibi kapsayıcıları sıralar. Varsayılan olarak artan düzende sıralar, ancak bir lambda ifadesi kullanarak sıralama davranışını özelleştirebilirsiniz.

Temel sözdizimi:

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

Lambda, karşılaştırılan öğeleri temsil eden iki parametre alır ve sıralanan sonuçta ilk öğenin ikinciden önce gelmesi gerekiyorsa true değerini döndürür.

Örnek - azalan düzen:

#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;  // Daha büyük sayılar önce gelir
});

Örnek - artan düzen:

std::sort(numbers.begin(), numbers.end(), [](int a, int b) {
    return a < b;  // Daha küçük sayılar önce gelir
});

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;
}
quiz iconKendini test et

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