Problem7793--学习系列——STL tuples I —— tuples 创建和访问

7793: 学习系列——STL tuples I —— tuples 创建和访问

[Creator : ]
Time Limit : 1.000 sec  Memory Limit : 256 MiB

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$ 位数据的内容。

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

Source/Category