pair和tuple是用来存储不同类型的值的容器
主要目的是为了方便存储和处理不同类型的数据,它们更适合在特定的情况下用于数据的组织和传递
pair
std::pair 是类模板,提供在一个单元中存储两个相异类型的对象
pair的初始化
1 2 3
| std::pair<int, float> pair = std::make_pair(10, 2.1); auto pair = std::make_pair(10,2.1); std::pair<int,float> pair(10,2.1);
|
std::get()
访问 pair 中的元素
示例
1 2 3 4 5 6 7 8 9
| #include <cstdio> #include <utility> int main() { std::pair<int, float> pair = std::make_pair(10, 2.1); printf("pair中的int:%d\n", std::get<int>(pair)); printf("pair中的float:%.1f\n", std::get<float>(pair)); printf("pair中的第一个元素:%d\n", std::get<0>(pair)); printf("pair中的第二个元素:%.1f\n", std::get<1>(pair)); }
|
输出
1 2 3 4
| pair中的int:10 pair中的float:2.1 pair中的第一个元素:10 pair中的第二个元素:2.1
|
tuple
类模板 std::tuple 是固定大小的异类值汇集。它是 std::pair 的泛用形式
tuple的初始化
1 2 3
| std::tuple<int, float> tuple = std::make_tuple(10, 2.1); auto tuple = std::make_tuple(10,2.1); std::tuple<int,float> tuple(10,2.1);
|
std::get()
元组式访问指定的元素
示例
1 2 3 4 5 6 7 8 9 10 11 12
| #include <iostream> #include <tuple> int main() { auto tuple = std::make_tuple(10, 2.1, 'A'); std::cout << "tuple中的第一个元素:" << std::get<0>(tuple) << "\n"; std::cout << "tuple中的第二个元素:" << std::get<1>(tuple) << "\n"; std::cout << "tuple中的第三个元素:" << std::get<2>(tuple) << "\n"; std::cout << "tuple中的int类型元素:" << std::get<int>(tuple) << "\n"; std::cout << "tuple中的double类型元素:" << std::get<double>(tuple) << "\n"; std::cout << "tuple中的char类型元素:" << std::get<char>(tuple) << "\n"; }
|
输出
1 2 3 4 5 6
| tuple中的第一个元素:10 tuple中的第二个元素:2.1 tuple中的第三个元素:A tuple中的int类型元素:10 tuple中的double类型元素:2.1 tuple中的char类型元素:A
|
tuple_cat
通过连接任意数量的元组来创建一个tuple
通俗点讲就是将两个tuple组成一个
示例
1 2 3 4 5 6 7 8 9 10 11 12
| #include <iostream> #include <tuple> int main() { auto tuple1 = std::make_tuple(10, 2.1); auto tuple2 = std::make_tuple('A', "B"); auto tuple = std::tuple_cat(tuple1, tuple2); std::cout << "tuple中的第一个元素:" << std::get<0>(tuple) << "\n"; std::cout << "tuple中的第二个元素:" << std::get<1>(tuple) << "\n"; std::cout << "tuple中的第三个元素:" << std::get<2>(tuple) << "\n"; std::cout << "tuple中的第四个元素:" << std::get<3>(tuple) << "\n"; }
|
输出
1 2 3 4
| tuple中的第一个元素:10 tuple中的第二个元素:2.1 tuple中的第三个元素:A tuple中的第四个元素:B
|
tie
创建左值引用的 tuple ,或将 tuple 解包为独立对象
示例
1 2 3 4 5 6 7 8 9 10
| #include <iostream> #include <tuple> int main() { auto tuple = std::make_tuple(10, 2.1); int i; double d; std::tie(i, d) = tuple; std::cout << "i的值:" << i << "\n" << "d的值:" << d << "\n"; }
|
输出
apply
自动解包元组中的元素,将它们传递给函数作为参数
示例
1 2 3 4 5 6 7 8 9 10 11 12
| #include <iostream> #include <tuple> int main() { auto tuple = std::make_tuple(10, 2.1); std::apply( [](int a, double b) { std::cout << "a的值:" << a << "\n"; std::cout << "b的值:" << b << "\n"; }, tuple); }
|
输出