pair和tuple是用来存储不同类型的值的容器
主要目的是为了方便存储和处理不同类型的数据,它们更适合在特定的情况下用于数据的组织和传递
pair
std::pair 是类模板,提供在一个单元中存储两个相异类型的对象
pair的初始化
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 中的元素
示例
int main() {
std::pair<int, float> pair = std::make_pair(10, 2.1);
printf("pair中的int:%d\n", std::get<int>(pair)); // 使用std::get访问存储在pair中的int类型元素
printf("pair中的float:%.1f\n", std::get<float>(pair)); // 使用std::get访问存储在pair中的float类型元素
printf("pair中的第一个元素:%d\n", std::get<0>(pair)); // 使用std::get访问pair中的第一个元素
printf("pair中的第二个元素:%.1f\n", std::get<1>(pair)); // 使用std::get访问pair中的第二个元素
}
输出
pair中的int:10
pair中的float:2.1
pair中的第一个元素:10
pair中的第二个元素:2.1
tuple
类模板 std::tuple 是固定大小的异类值汇集。它是 std::pair 的泛用形式
tuple的初始化
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()
元组式访问指定的元素
示例
int main() {
// 创建一个std::tuple,包含一个整数、一个浮点数和一个字符,使用std::make_tuple初始化
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";
}
输出
tuple中的第一个元素:10
tuple中的第二个元素:2.1
tuple中的第三个元素:A
tuple中的int类型元素:10
tuple中的double类型元素:2.1
tuple中的char类型元素:A
tuple_cat
通过连接任意数量的元组来创建一个tuple
通俗点讲就是将两个tuple组成一个
示例
int main() {
auto tuple1 = std::make_tuple(10, 2.1);
auto tuple2 = std::make_tuple('A', "B");
// 使用 std::tuple_cat 将两个元组合并为一个新的元组
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";
}
输出
tuple中的第一个元素:10
tuple中的第二个元素:2.1
tuple中的第三个元素:A
tuple中的第四个元素:B
tie
创建左值引用的 tuple ,或将 tuple 解包为独立对象
示例
int main() {
auto tuple = std::make_tuple(10, 2.1);
int i;
double d;
// 使用std::tie解包tuple中的元素,将其分别赋值给i和d
std::tie(i, d) = tuple;
std::cout << "i的值:" << i << "\n" << "d的值:" << d << "\n";
}
输出
i的值:10
d的值:2.1
apply
自动解包元组中的元素,将它们传递给函数作为参数
示例
int main() {
auto tuple = std::make_tuple(10, 2.1);
// 使用 std::apply 调用lambda函数,将tuple中的元素作为参数传递给lambda
std::apply(
[](int a, double b) {
std::cout << "a的值:" << a << "\n";
std::cout << "b的值:" << b << "\n";
},
tuple);
}
输出
a的值:10
b的值:2.1
About this Post
This post is written by JinHong Zeng, licensed under CC BY-NC 4.0.