C++11——多元组类别
二元组(pair)
将两个元素合成一个对象,声明:
类模板 : template<class T1,class T2> struct pair
使用first
和second
来访问其中的两个元素,用make_pair()
来构造 。
g_map_file.insert(std::pair<std::string,FILE_INFO>(file_path,file_info));
如果用一个对象来存储多个元素,依然可以选择结构体,但是C++ 11提供了一种STL:tuple
,多元组。声明:
template <class ...Types> class tuple; //可变参数模板
std::tuple <int, double, long &, const char*> test_tuple;
long lengthy = 12;
test_tuple proof(18, 6.5, lengthy, "Ciao!");
lengthy = std::get<0>(proof);
std::get<3>(proof) = " Beautiful!";
将一个 多元组类别对象赋值给另一个多元组类别对象:
条件:若这两个多元组类别相同,则其内含的每一个元素其类别都要定义拷贝构造函数;否则的话,赋值操作符右边的多元组其内含元素的类别必须能转换成左边的多元组其对应的元素类别,又或者赋值操作符左边的多元组其内含元素的类别必须定义适当的构造函数。
std::tuple< int, double, string> t1;
std::tuple< char, short, const char*> t2 ('X', 2, "Hola!");
t1 = t2; //ok
也可以使用std::make_tuple
构造一个多元组。
std::tie
创建左值引用的 tuple
,或将 tuple 解包为独立对象 。
std::ignore
解包 tuple
时用来跳过元素的占位符 。
auto record = std::make_tuple("Hari Ram", "New Delhi", 3.5, 'A');
std::string name ; float gpa ; char grade ;
std::tie(name, std::ignore, gpa, grade) = record ;
std::cout << name << ' ' << gpa << ' ' << grade << std::endl ;
std::tuple_size<T>::value //在编译时获得 tuple 的大小
std::tuple_element<I, T>::type //获得指定元素的类型