Tuples in C++

26 Jun, 2020
What is a tuple?A tuple is an object that can hold a number of elements. The elements can be of different data types. The elements of tuples are initialized as arguments in order in which they will be accessed.
Operations on tuple :-
1. get() :- get() is used to access the tuple values and modify them, it accepts the index and tuple name as arguments to access a particular tuple element.
2. make_tuple() :- make_tuple() is used to assign tuple with values. The values passed should be in order with the values declared in tuple.
// C++ code to demonstrate tuple, get() and make_pair()#include<iostream>#include<tuple> // for tupleusing namespace std;int main(){    // Declaring tuple    tuple <char, int, float> geek;      // Assigning values to tuple using make_tuple()    geek = make_tuple('a', 10, 15.5);      // Printing initial tuple values using get()    cout << "The initial values of tuple are : ";    cout << get<0>(geek) << " " << get<1>(geek);    cout << " " << get<2>(geek) << endl;      // Use of get() to change values of tuple    get<0>(geek) = 'b';    get<2>(geek) =  20.5;       // Printing modified tuple values    cout << "The modified values of tuple are : ";    cout << get<0>(geek) << " " << get<1>(geek);    cout << " " << get<2>(geek) << endl;      return 0;}
Output:
The initial values of tuple are : a 10 15.5
The modified values of tuple are : b 10 20.5

In the above code, get() modifies the 1st nd 3rd value of tuple.
3. tuple_size :- It returns the number of elements present in the tuple.
//C++ code to demonstrate tuple_size#include<iostream>#include<tuple> // for tuple_size and tupleusing namespace std;int main(){      // Initializing tuple    tuple <char,int,float> geek(20,'g',17.5);      // Use of size to find tuple_size of tuple    cout << "The size of tuple is : ";    cout << tuple_size<decltype(geek)>::value << endl;      return 0;  }
Output:
The size of tuple is : 3

4. swap() :- The swap(), swaps the elements of the two different tuples.
//C++ code to demonstrate swap()#include<iostream>#include<tuple> // for swap() and tupleusing namespace std;int main(){      // Initializing 1st tuple    tuple <int,char,float> tup1(20,'g',17.5);          // Initializing 2nd tuple    tuple <int,char,float> tup2(10,'f',15.5);          // Printing 1st and 2nd tuple before swapping    cout << "The first tuple elements before swapping are : ";    cout <<  get<0>(tup1) << " " << get<1>(tup1) << " "         << get<2>(tup1) << endl;    cout << "The second tuple elements before swapping are : ";    cout <<  get<0>(tup2) << " " << get<1>(tup2) << " "          << get<2>(tup2) << endl;          // Swapping tup1 values with tup2    tup1.swap(tup2);          // Printing 1st and 2nd tuple after swapping    cout << "The first tuple elements after swapping are : ";    cout <<  get<0>(tup1) << " " << get<1>(tup1) << " "          << get<2>(tup1) << endl;    cout << "The second tuple elements after swapping are : ";    cout <<  get<0>(tup2) << " " << get<1>(tup2) << " "          << get<2>(tup2) << endl;      return 0;}
Output:
The first tuple elements before swapping are : 20 g 17.5
The second tuple elements before swapping are : 10 f 15.5
The first tuple elements after swapping are : 10 f 15.5
The second tuple elements after swapping are : 20 g 17.5

5. tie() :- The work of tie() is to unpack the tuple values into separate variables. There are two variants of tie(), with and without “ignore” , the “ignore” ignores a particular tuple element and stops it from getting unpacked.
// C++ code to demonstrate working of tie()#include<iostream>#include<tuple> // for tie() and tupleusing namespace std;int main(){       // Initializing variables for unpacking    int i_val;    char ch_val;    float f_val;             // Initializing tuple    tuple <int,char,float> tup1(20,'g',17.5);      // Use of tie() without ignore    tie(i_val,ch_val,f_val) = tup1;          // Displaying unpacked tuple elements    // without ignore    cout << "The unpacked tuple values (without ignore) are : ";    cout << i_val << " " << ch_val << " " << f_val;    cout << endl;          // Use of tie() with ignore    // ignores char value    tie(i_val,ignore,f_val) = tup1;          // Displaying unpacked tuple elements    // with ignore    cout << "The unpacked tuple values (with ignore) are : ";    cout << i_val  << " " << f_val;    cout << endl;      return 0;  }
Output:
The unpacked tuple values (without ignore) are : 20 g 17.5
The unpacked tuple values (with ignore) are : 20 17.5

6. tuple_cat() :- This function concatenates two tuples and returns a new tuple.
// C++ code to demonstrate working of tuple_cat()#include<iostream>#include<tuple> // for tuple_cat() and tupleusing namespace std;int main(){    // Initializing 1st tuple    tuple <int,char,float> tup1(20,'g',17.5);      // Initializing 2nd tuple    tuple <int,char,float> tup2(30,'f',10.5);          // Concatenating 2 tuples to return a new tuple    auto tup3 = tuple_cat(tup1,tup2);          // Displaying new tuple elements    cout << "The new tuple elements in order are : ";    cout << get<0>(tup3) << " " << get<1>(tup3) << " ";    cout << get<2>(tup3) << " " << get<3>(tup3) << " ";    cout << get<4>(tup3) << " " << get<5>(tup3) << endl;      return 0;}
Output:
The new tuple elements in order are : 20 g 17.5 30 f 10.5

This article is contributed by Manjeet Singh .If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
nidhi_biet
CPP-Library
cpp-tuple
STL
C++
STL
CPP
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Bitwise Operators in C/C++
Set in C++ Standard Template Library (STL)
unordered_map in C++ STL
Inheritance in C++
vector erase() and clear() in C++
The C++ Standard Template Library (STL)
C++ Classes and Objects
Substring in C++
Object Oriented Programming in C++
Priority Queue in C++ Standard Template Library (STL)