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.
- Enthält zwei Elemente:
firstundsecond - Jedes Element kann einen anderen Typ haben
- Nützlich zum Zurückgeben mehrerer Werte
#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: Wenn nur zwei Werte gespeichert werden müssen.
- tuple: Wenn mehr als zwei Werte und unterschiedliche Typen benötigt werden.
- structured binding: Für saubere und gut lesbare Zerlegung.
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
Iteratoren und ihr Einsatz in der C++ STL
Lernen Sie Iteratoren in C++ und ihren Einsatz mit STL-Containern und Algorithmen für eine effiziente Datenverarbeitung.
Schlüssel-Wert-Strukturen mit std::map und std::unordered_map in C++
Lernen Sie std::map und std::unordered_map in C++ für effiziente Schlüssel-Wert-Datenstrukturen und schnelle Suchvorgänge.
Überblick über die C++-Standardbibliothek
Lernen Sie die C++-Standardbibliothek mit STL-Containern, Algorithmen und wichtigen Komponenten für moderne C++-Entwicklung.