Класс tuple
Класс tuple представляет собой контейнер фиксированного размера, который может хранить элементы различных типов. В отличие от pair, который хранит ровно два значения, tuple может содержать произвольное количество элементов. Элементы кортежа доступны по индексу с помощью функции get, а также с помощью функций make_tuple, tie и tuple_cat. Для работы с классом необходимо подключить заголовочный файл <tuple>.
Синтаксис
#include <tuple>
std::tuple<type1, type2, ...> name;
std::make_tuple(value1, value2, ...);
std::get<index>(tuple);
Пример
Давайте создадим кортеж из трех элементов разных типов и выведем их на экран:
#include <iostream>
#include <tuple>
#include <string>
using namespace std;
int main()
{
tuple<int, string, double> t = {1, "abcde", 3.14};
cout << get<0>(t) << endl;
cout << get<1>(t) << endl;
cout << get<2>(t) << endl;
return 0;
}
Результат выполнения кода:
1
"abcde"
3.14
Пример
Давайте создадим кортеж с помощью функции make_tuple и изменим его элементы:
#include <iostream>
#include <tuple>
#include <string>
using namespace std;
int main()
{
auto t = make_tuple(1, "abcde", 3.14);
get<0>(t) = 2;
get<1>(t) = "12345";
cout << get<0>(t) << endl;
cout << get<1>(t) << endl;
cout << get<2>(t) << endl;
return 0;
}
Результат выполнения кода:
2
12345
3.14
Пример
Давайте распакуем кортеж в отдельные переменные с помощью функции tie:
#include <iostream>
#include <tuple>
#include <string>
using namespace std;
int main()
{
auto t = make_tuple(1, "abcde", 3.14);
int a;
string b;
double c;
tie(a, b, c) = t;
cout << a << endl;
cout << b << endl;
cout << c << endl;
return 0;
}
Результат выполнения кода:
1
"abcde"
3.14
Пример
Давайте объединим два кортежа в один с помощью функции tuple_cat:
#include <iostream>
#include <tuple>
#include <string>
using namespace std;
int main()
{
auto t1 = make_tuple(1, "abcde");
auto t2 = make_tuple(3.14, 'z');
auto t3 = tuple_cat(t1, t2);
cout << get<0>(t3) << endl;
cout << get<1>(t3) << endl;
cout << get<2>(t3) << endl;
cout << get<3>(t3) << endl;
return 0;
}
Результат выполнения кода:
1
"abcde"
3.14
"'z'"
Пример
Давайте узнаем количество элементов в кортеже с помощью tuple_size:
#include <iostream>
#include <tuple>
#include <string>
using namespace std;
int main()
{
tuple<int, string, double> t = {1, "abcde", 3.14};
cout << tuple_size<decltype(t)>::value << endl;
return 0;
}
Результат выполнения кода:
3
Смотрите также
-
класс
pair,
который хранит два значения -
класс
any,
который хранит значение любого типа -
тип
int,
который хранит целые числа -
тип
initializer_list,
который используется для инициализации контейнеров