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

challenge icon

Görev

Kolay

std::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 n tamsayısı
  • Sıralanacak elemanları temsil eden n tamsayı
  • Sıralama düzenini temsil eden bir order karakteri (A artan, D azalan sıralama için)

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

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

Sıralama davranışı şöyle olmalıdır:

  • order A ise: artan düzende sıralayın (küçükten büyüğe)
  • order D ise: 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;
}
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

Kendi başına pratik yap: Online C++ derleyicisi