Yükleniyor...

C++ pair, tuple ve Structured Binding

C++'ta pair, tuple ve Structured Binding kullanımını öğrenin. Birden fazla değeri yönetme ve modern C++ tekniklerini örneklerle keşfedin.

C++ Standard Library, birden fazla değeri tek bir yapıda depolamak için pair ve tuple veri türlerini sağlar. C++17 ile birlikte gelen structured binding ise bu yapıların elemanlarını çok daha okunabilir bir şekilde değişkenlere ayırmayı mümkün kılar. Bu makalede pair, tuple ve structured binding kavramları detaylı örneklerle açıklanmaktadır.


1) pair Nedir?

std::pair, iki farklı değeri tek bir nesne içinde tutan basit bir veri yapısıdır. Değerlerin türleri farklı olabilir.


#include <utility>
#include <iostream>
using namespace std;

int main() {
    pair<string, int> person("Ali", 30);

    cout << person.first << ", " << person.second << endl;
}

Çıktı: Ali, 30


2) make_pair Kullanımı


auto p = make_pair("Ayşe", 25);
cout << p.first << ", " << p.second;

3) pair Döndüren Fonksiyon


pair<int,int> getMinMax(int a, int b) {
    return { min(a, b), max(a, b) };
}

int main() {
    auto result = getMinMax(15, 40);
    cout << "Min: " << result.first 
         << ", Max: " << result.second;
}

4) tuple Nedir?

std::tuple, ikiden fazla değeri (her biri farklı türden olabilir) tek bir yapıda saklamaya yarar. tuple, pair'in daha genel bir hâlidir.


#include <tuple>
#include <iostream>
using namespace std;

int main() {
    tuple<string, int, double> student("Mehmet", 22, 3.40);

    cout << get<0>(student) << endl;
    cout << get<1>(student) << endl;
    cout << get<2>(student) << endl;
}

Çıktı:
Mehmet
22
3.4


5) make_tuple Kullanımı


auto data = make_tuple("Kitap", 350, 49.90);

cout << get<0>(data) << endl;
cout << get<1>(data) << endl;
cout << get<2>(data) << endl;

6) tuple Boyutu ve Tür Bilgisi


tuple<string, int, double> t;

cout << tuple_size<decltype(t)>::value << endl;
// tuple_size = 3

// Tür öğrenme
using T0 = tuple_element<0, decltype(t)>::type;

7) Structured Binding (C++17)

C++17 ile gelen structured binding, pair ve tuple üyelerini daha okunabilir bir şekilde değişkenlere ayırmayı sağlar.


auto student = make_tuple("Zeynep", 21, 3.75);

auto [name, age, gpa] = student;

cout << name << " - " << age << " - " << gpa;

Avantaj: get<> kullanmadan kısa ve anlaşılır kod.


8) pair ile Structured Binding


pair<string, int> book("C++", 450);

auto [title, pages] = book;

cout << title << " - " << pages;

9) Fonksiyondan tuple Döndürmek


tuple<string,double,int> getProduct() {
    return { "Laptop", 14500.99, 24 };
}

int main() {
    auto [name, price, stock] = getProduct();

    cout << name << ", " 
         << price << ", " 
         << stock;
}

10) Uygulamalı Örnek – Kullanıcı Bilgisi


#include <tuple>
#include <iostream>
using namespace std;

tuple<string,int,string> getUser() {
    return { "Ahmet", 28, "Mühendis" };
}

int main() {
    auto [name, age, job] = getUser();

    cout << name << " (" << age << ") - " << job;
}

11) Hangisini Ne Zaman Kullanmalı?

pair → basit iki değer
tuple → çoklu ve farklı türde değerler
structured binding → temiz ve anlaşılır kullanım


12) TL;DR

  • pair: first–second yapısında iki değer tutar.
  • tuple: çok sayıda farklı türü tek yapıda toplar.
  • structured binding: tuple/pair değerlerini pratik şekilde değişkenlere açar.
  • Tüm örnekler Visual Studio 2022 ve GCC ile uyumludur.

İlişkili Makaleler