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.
- İki eleman içerir:
firstvesecond - Farklı türler bir arada saklanabilir
- Fonksiyonlardan birden fazla değer döndürmek için sıklıkla kullanılır
#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: Sadece iki değer tutmanız gerekiyorsa.
- tuple: İkiden fazla değeri birbirinden bağımsız türlerle depolamak için.
- structured binding: pair/tuple verilerini daha okunabilir bir şekilde parçalamak için.
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
C++ İteratör Kavramı ve STL'de Kullanımı
C++'ta iterator kavramını ve STL konteynerleriyle kullanımını öğrenin. Veri dolaşımı, algoritmalar ve modern STL örnekleriyle keşfedin.
C++ map ve unordered_map ile Anahtar-Değer Yapıları
C++ std::map ve std::unordered_map kullanımını öğrenin. Anahtar-değer yapıları, arama performansı ve kullanım senaryolarını örneklerle keşfedin.
C++ Standard Library'ye Genel Bakış
C++ Standard Library'yi öğrenin. STL bileşenleri, konteynerler, algoritmalar ve modern C++ geliştirmede temel kütüphaneleri keşfedin.