当我们希望一些数据组合成单一对象时,可以使用tuple,一个tuple可以有任意数量的成员,成员的类型可以各不相同,每个确定的tuple类型的成员数目是固定的。
tuple的操作
初始化:tuple的构造函数是explicit的,所以需要使用直接初始化语法
访问:使用一个名为get的标准库函数模版,想访问第几个成员参数就传几,返回指定成员引用
int main()
{
std::tuple<size_t, size_t, size_t> threeD; //初始化为0
std::tuple<size_t, size_t, size_t> threeD2{ 1,2,3 }; //使用直接初始化方式
std::tuple<std::string, std::vector<double>, int, std::list<int>> someVal("constants", { 3.14,2.178 }, 42, { 1,2 });
std::tuple<std::vector<int>, int> t = std::make_tuple(std::vector<int>{1,2}, 1);
auto at = std::make_tuple("xxxx", 1, 3.14); //tuple<const char*,int,double>
auto ss = std::get<0>(someVal); //返回someVal的第一个成员 ss为constants
typedef decltype(someVal) trans;
size_t sz = std::tuple_size<trans>::value; //sz为4
std::tuple_element<0, trans>::type sType = "s"; //sType类型为string
}
相等比较
只有俩个tuple具有相同数量的成员时,才可以比较他们,为了使用tuple的相等或不等运算符,对每对成员使用==运算符必须合法,为使用关系运算符,对每对成员使用<必须是合法的。比如比较size_t和string类型则是不合法的。
std::tuple<std::string, std::string>duo("1", "2");
std::tuple<size_t, size_t> twoD(1, 2);
bool b = (duo == twoD); //错误,不能比较size_t和string