C++ tuple元组的基本用法(总结)
什么是tuple
tuple是C++11标准引入的一个新数据结构,是一个固定大小且支持混合类型的序列。
tuple的定义
我们使用std::tuple<Types...>
语法来定义一个tuple变量,其中Types是其元素的类型列表。
#include <tuple>
std::tuple<int, double, std::string> my_tuple{1, 3.14, "hello"};
tuple的基本操作
元素访问
可以使用std::get来访问tuple的元素,该函数使用整数索引从0开始访问tuple的元素。
auto i = std::get<0>(my_tuple); // 1
auto d = std::get<1>(my_tuple); // 3.14
auto s = std::get<2>(my_tuple); // "hello"
元素修改
tuple是不可变的,我们无法直接修改某个元素的值。但是可以使用std::make_tuple和std::tie来创建一个新的tuple,从而间接实现元素值的修改。
std::tuple<int, double, std::string> my_tuple{1, 3.14, "hello"};
auto new_tuple = std::make_tuple(std::get<0>(my_tuple), 6.28, std::get<2>(my_tuple));
std::tie(std::get<0>(my_tuple), std::get<1>(my_tuple), std::get<2>(my_tuple)) = new_tuple;
元素大小和类型
tuple的大小可以使用std::tuple_size来获取,需要指明tuple的类型。
std::tuple<int, double, std::string> my_tuple{1, 3.14, "hello"};
int size = std::tuple_size<std::remove_reference<decltype(my_tuple)>::type>::value; // 3
可以使用std::tuple_element来获取指定位置元素的类型。
std::tuple<int, double, std::string> my_tuple{1, 3.14, "hello"};
using second_type = std::tuple_element<1, decltype(my_tuple)>::type; // double
示例说明
示例一
此部分代码定义了一个按照姓名字典序、工龄和薪水排序的员工信息:
#include <iostream>
#include <tuple>
#include <vector>
#include <algorithm>
struct Employee
{
std::string name;
int age;
double salary;
};
bool cmp(const Employee& e1, const Employee& e2)
{
return std::tie(e1.name, e1.age, e1.salary) < std::tie(e2.name, e2.age, e2.salary);
}
int main()
{
std::vector<Employee> vec{
{"John", 35, 5000.0},
{"John", 45, 6000.0},
{"Eric", 40, 5500.0}
};
std::sort(vec.begin(), vec.end(), cmp);
for (auto& e : vec)
{
std::cout << e.name << ", " << e.age << ", " << e.salary << std::endl;
}
return 0;
}
在比较两个员工信息时,我们使用了std::tie函数将员工的姓名、工龄和薪水打包成一个tuple,从而实现了基于多个字段的比较。
示例二
此部分代码定义了一个函数,将两个数分别加上一个偏移量,最终返回它们的和以及他们的积:
#include <iostream>
#include <tuple>
std::tuple<int, int, int> process_number(int x, int y, int offset)
{
x += offset;
y += offset;
return std::make_tuple(x + y, x * y, 0); // 0 这里只是为了占位而返回的
}
int main()
{
auto result = process_number(3, 4, 2);
std::cout << "Sum = " << std::get<0>(result) << std::endl; // Sum = 18
std::cout << "Product = " << std::get<1>(result) << std::endl; // Product = 70
return 0;
}
这里我们使用了std::make_tuple函数创建了一个新的tuple,并使用std::get函数在主函数中获取了返回的各个值。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++ tuple元组的基本用法(总结) - Python技术站