pair, tuple et Structured Binding en C++
Apprenez pair, tuple et le Structured Binding en C++ pour manipuler plusieurs valeurs avec un code moderne et lisible.
La bibliothèque standard C++ fournit les types pair et tuple pour stocker plusieurs valeurs dans une seule structure. Avec C++17, le structured binding a été introduit, permettant une extraction beaucoup plus lisible et intuitive des valeurs contenues dans ces structures. Cet article explique en détail les concepts de pair, tuple et structured binding avec des exemples pratiques.
1) Qu’est-ce que pair ?
std::pair est une structure simple qui contient deux valeurs, éventuellement de types différents. Il est particulièrement utile lorsque l’on souhaite retourner deux valeurs depuis une fonction.
- Contient deux éléments :
firstetsecond - Les deux types peuvent être différents
- Très utilisé pour retourner plusieurs valeurs
#include <utility>
#include <iostream>
using namespace std;
int main() {
pair<string, int> person("Ali", 30);
cout << person.first << ", " << person.second << endl;
}
Sortie : Ali, 30
2) Utiliser make_pair
auto p = make_pair("Ayse", 25);
cout << p.first << ", " << p.second;
3) Fonction retournant un pair
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) Qu’est-ce que tuple ?
std::tuple est une version généralisée de pair, capable de contenir plus de deux valeurs, même si elles sont toutes de types différents. C’est une solution idéale pour regrouper plusieurs données hétérogènes.
#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) Utilisation de make_tuple
auto data = make_tuple("Livre", 350, 49.90);
cout << get<0>(data) << endl;
cout << get<1>(data) << endl;
cout << get<2>(data) << endl;
6) Taille et informations de type d’un tuple
tuple<string, int, double> t;
cout << tuple_size<decltype(t)>::value << endl;
// taille du tuple = 3
// Extraction du type
using T0 = tuple_element<0, decltype(t)>::type;
7) Structured Binding (C++17)
Le structured binding offre une manière beaucoup plus propre et lisible d’extraire les valeurs d’un tuple ou d’un pair dans des variables individuelles.
auto student = make_tuple("Zeynep", 21, 3.75);
auto [name, age, gpa] = student;
cout << name << " - " << age << " - " << gpa;
8) Structured Binding avec pair
pair<string, int> book("C++", 450);
auto [title, pages] = book;
cout << title << " - " << pages;
9) Retourner un tuple depuis une fonction
tuple<string,double,int> getProduct() {
return { "Ordinateur", 14500.99, 24 };
}
int main() {
auto [name, price, stock] = getProduct();
cout << name << ", "
<< price << ", "
<< stock;
}
10) Exemple pratique — Informations utilisateur
#include <tuple>
#include <iostream>
using namespace std;
tuple<string,int,string> getUser() {
return { "Ahmet", 28, "Ingénieur" };
}
int main() {
auto [name, age, job] = getUser();
cout << name << " (" << age << ") - " << job;
}
11) Quand utiliser quelle structure ?
- pair : lorsque vous devez stocker exactement deux valeurs.
- tuple : lorsque vous devez stocker plusieurs valeurs de types différents.
- structured binding : pour extraire proprement les données d’un pair ou d’un tuple.
pair → structure simple à deux valeurs
tuple → valeurs multiples et hétérogènes
structured binding → extraction claire et lisible
12) TL;DR
- pair : stocke deux valeurs (first, second).
- tuple : stocke plusieurs valeurs de différents types.
- structured binding : décompose pair/tuple en variables lisibles.
- Tous les exemples fonctionnent sous Visual Studio 2022 et GCC.
Articles connexes
Aperçu de la bibliothèque standard C++
Découvrez la bibliothèque standard C++, les conteneurs STL, les algorithmes et les composants essentiels du développement moderne.
Itérateurs et leur utilisation dans la STL en C++
Apprenez les itérateurs en C++ et leur utilisation avec les conteneurs et algorithmes STL pour parcourir efficacement les données.
Structures clé-valeur avec std::map et std::unordered_map en C++
Apprenez à utiliser std::map et std::unordered_map en C++ pour gérer efficacement des structures clé-valeur.