二元組(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 //獲得指定元素的類型