(7)std::tuple
std::tuple 是 C++ 标准库中的一个模板类,它提供了一种将多个不同类型的数据组合成一个单一对象的方法。你可以把它想象成一个固定大小的异构容器,类似于一个“匿名的结构体”。
std::tuple 比较操作:
类型必须匹配(不同类型,不能直接比较)
元素类型必须支持比较,tuple 中的每个元素类型都必须支持相应的比较运算符(==, < 等)。
相等性比较 (==, !=):
- 两个 tuple 相等当且仅当它们具有相同的类型(即相同数量和类型的元素),它们对应位置上的每个元素都相等。
有序比较 (<, <=, >, >=):
- 从第一个元素开始比较。
- 如果第一个元素不等,则结果由第一个元素的比较决定。
- 如果第一个元素相等,则比较第二个元素,依此类推。
- 如果所有元素都相等,则两个 tuple 相等。
- 如果一个 tuple 是另一个的前缀(元素更少),则较短的 tuple 被认为更小。
使用场景
- 函数返回多个值:比 std::pair 更灵活。
- 作为容器的键:例如 std::map<std::tuple<int, std::string>, Value>。
- 元组比较和排序:利用字典序进行复杂排序。
- 泛型编程:与模板、变参模板(variadic templates)结合使用。
std::tie: 用于拆开tuple
auto tup1 = std::make_tuple(3.14, 1, 'a');
double a;
int b;
char c;
std::tie(a, b, c) = tup1;
ignore:如果不想要某一位的值,可以直接将其用ignore代替。
std::tie(ignore, b, c) = tup1;
std::tuple_cat: 用于连接tuple
std::tuple<float, string> tup1(3.14, "pi");
std::tuple<int, char> tup2(10, 'a');
auto tup3 = std::tuple_cat(tup1, tup2);
将tup1和tup2连起来就成了tup3。
浙公网安备 33010602011771号