7793: 学习系列——STL tuples I —— tuples 创建和访问
[Creator : ]
Description
在某些场合,我们需要使用 $n\ (n>2)$ 个数据。当然,我们可以使用 pair 来保存,如下所示。
可以在定义多元组的时候,同时进行初始化。例如
同样可以在定义完成后,对变量进行赋值。例如
下面有一个简单的题目对以上知识点做一个测试。
pair<int,pair<int,int>>这样使用很不方便,我们可以直接使用 STL 的 tuples 来创建一个多元组。
【定义多元组】
tuple<type1, type2, ..., typeN> t; //创建 n 个元素组成的多元组,元素下标从 0 开始,第 i 个元素为 typei。例如:
//一个三元组 tuple<int, int, int> t1; //一个四元组 tuple<int, long long, double, string> t2; ...【初始化】
可以在定义多元组的时候,同时进行初始化。例如
tuple<int, int, int> t{3, 4, 5};//第一个元素为 3,第二个元素为 4,第三个元素为 5【赋值】
同样可以在定义完成后,对变量进行赋值。例如
tuple<int, int, int> t1=make_tuple(3, 4, 5); tuple<int, int, int, int> t2 = tie(3, 4, 5, 6);【访问】
tuple<int, int, int> t{3, 4, 5}; int i = 0; cout << get<i>(t); //访问第一个元素 cout << get<1>(t); //访问第二个元素 cout << get<2>(t); //访问第三个元素【完整例子】
#include <bits/stdc++.h> using namespace std; int main() { int a = 3, b = 4, c = 5, d = 6; tuple<int, int, int, int> t = tie(a, b, c, d); cout << get<0>(t) << " " << get<1>(t) << " " << get<2>(t)<< " " << get<3>(t) << endl; get<0>(t) = 7; cout << get<0>(t) << " " << get<1>(t) << " " << get<2>(t) << endl; tuple<string, string, int> tp2 = make_tuple("Hello", "world", 100); string s1, s2; int x; tie(s1, s2, x) = tp2; cout << s1 << " " << s2 << " " << x << endl; } /* Output: 3 4 5 7 4 5 Hello world 100 */
下面有一个简单的题目对以上知识点做一个测试。
Input
第一行为一个整数。
第二行为一个实数。
第三行为一个字符串,注意可能包括空格。
第四行为一个单字符。
第五行包括一个正整数 $q\ (1 \leq q \leq 20)$ 表示 $q$ 个查询。
第六行包含 $q$ 个正整数,第 $i\ (0 \leq q \leq 3)$ 个正整数表示询问这个多元组第 $i$ 位数据的内容。
第二行为一个实数。
第三行为一个字符串,注意可能包括空格。
第四行为一个单字符。
第五行包括一个正整数 $q\ (1 \leq q \leq 20)$ 表示 $q$ 个查询。
第六行包含 $q$ 个正整数,第 $i\ (0 \leq q \leq 3)$ 个正整数表示询问这个多元组第 $i$ 位数据的内容。
Output
一共 $q$ 行,第 $i\ (0 \leq q \leq 3)$ 行表示这个多元组第 $i$ 位数据的内容。
Sample 1 Input
3
3.14
Hello world
B
4
3 2 1 0
Sample 1 Output
B
Hello world
3.14
3
Sample 2 Input
3
3.14
Hello world
B
6
1 2 3 0 2 1
Sample 2 Output
3.14
Hello world
B
3
Hello world
3.14