当前位置: 代码迷 >> 综合 >> C++ pair 和 tuple
  详细解决方案

C++ pair 和 tuple

热度:67   发布时间:2023-11-30 09:33:57.0

目录

1、pair 

2、tuple


1、pair 

pair的一个常见用途是从一个函数返回2个值。

注: map的元素是pair。

pair支持的操作(头文件:utility)
pair<T1,T2> p p是一个pair,两个类型分别为T1和T2的成员都进行初始化
pair<T1,T2> p<v1,v2> p是一个成员类型为T1和T2的pair,first和second的成员分别用v1和v2进行初始化
pair<T1,T2> p={v1,v2} 等价于p<v1,v2>
make_pair(v1,v2) 返回一个用v1和v2初始化的pair。pair的类型从v1和v2的类型推断出来
p.first 返回p的名为first的(公有)数据成员
p.second 返回p的名为second的(公有)数据成员
p1 relop p2 关系运算符(<、>、<=、>=)按字典序定义
p1==p2 当first和second成员分别相等时,两个pair相等。相等性判断利用元素的==运算符实现
p1!=p2

2、tuple

tuple的一个常见用途是从一个函数返回多个值。

tuple支持的操作(头文件:tuple)
tuple<T1,T2,...Tn> t t是一个tuple,成员数为n,第i个成员的类型为Ti。所有成员都进行值初始化。
tuple<T1,T2,...Tn> t(v1,v2,...,vn)

t是一个tuple,成员类型为T1...Tn,每个成员用对应的初始值vi进行初始化。

注:此构造函数是explicit的。

make_tuple(v1,v2,...,vn) 返回一个用给定初始值初始化的tuple,tuple的类型从初始值的类型推断
t1==t2 当两个tuple具有相同数量的成员且成员对应相等时,两个tuple相等。这两个操作使用成员的==运算符来完成。
t1!=t2
t1 repop t2

tuple的关系运算使用字典序。

注:两个tuple必须具有相同数量的成员。

get<i> (t)

返回t的第i个数据成员的引用;如果t是一个左值,结果是一个左值的引用;否则,结果是一个右值引用。

注:tuple的所有成员都是public的。

tuple_size<tupleType>::Value 一个类模板,可以通过一个tuple类型来初始化。它有一个名为value的public constexpr static数据成员,类型为size_t,表示给定tuple类型中成员的数量。
tuple_element<i,tupleType>::type 一个类模板,可以通过一个整形常量和一个tuple类型来初始化。它有一个名为type的public成员,表示给定tuple类型中指定成员的类型。

如果不知道一个tuple准确的类型细节信息,可以用两个辅助类模板来查询tuple成员的数量和类型:

auto item = make_tuple("hello",10,20.0);typedef decltype(item) im;
size_t sz = tuple_size<im>::value;
tuple_element<1,im>::type cnt = get<1>(item)