Wird geladen...

pair, tuple und Structured Binding in C++

Lernen Sie pair, tuple und Structured Binding in C++, um mehrere Werte effizient und modern zu verwalten.

Die C++-Standardbibliothek stellt pair und tuple bereit, um mehrere Werte in einer einzigen Struktur zu speichern. Mit C++17 wurde das structured binding eingeführt, das eine deutlich lesbarere Möglichkeit bietet, diese Strukturen in einzelne Variablen zu zerlegen. In diesem Artikel werden pair, tuple und structured binding mit praktischen Beispielen erklärt.


1) Was ist pair?

std::pair ist eine einfache Datenstruktur, die zwei Werte enthält, die unterschiedliche Typen haben können. Häufig wird pair in Funktionen verwendet, die zwei Werte zurückgeben müssen.


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

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

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

Ausgabe: Ali, 30


2) Verwendung von make_pair


auto p = make_pair("Ayse", 25);
cout << p.first << ", " << p.second;

3) Funktion, die ein pair zurückgibt


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) Was ist tuple?

std::tuple ist eine verallgemeinerte Form von pair und kann mehr als zwei Werte speichern – auch wenn diese unterschiedliche Typen besitzen. Tuple eignet sich zur Gruppierung heterogener Daten.


#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;
}

5) Verwendung von make_tuple


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

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

6) tuple-Größe und Typinformationen


tuple<string, int, double> t;

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

// Typinformationen auslesen
using T0 = tuple_element<0, decltype(t)>::type;

7) Structured Binding (C++17)

Structured Binding ermöglicht es, pair- und tuple-Werte auf eine sehr lesbare und intuitive Weise in einzelne Variablen zu zerlegen.


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

auto [name, age, gpa] = student;

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

8) Structured Binding mit pair


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

auto [title, pages] = book;

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

9) tuple als Rückgabewert einer Funktion


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

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

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

10) Praktisches Beispiel — Benutzerinformationen


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

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

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

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

11) Wann sollte man welche Struktur verwenden?

pair → einfache Zweierstruktur
tuple → mehrere heterogene Werte
structured binding → klare, intuitive Entpackung


12) TL;DR

  • pair: Speichert zwei Werte (first, second).
  • tuple: Speichert mehrere Werte unterschiedlichen Typs.
  • structured binding: Zerlegt pair/tuple in benannte Variablen.
  • Alle Beispiele funktionieren unter Visual Studio 2022 und GCC.

Ähnliche Artikel