std::pair, std::tuple
//pair =#include <utility>
//tuple =#include <tuple>
std::pair<int, std::string> pairTest;
pairTest.first = 1;
pairTest.second = "PAIR";
printf("%d %s \n", pairTest.first, pairTest.second.c_str() );
std::tuple<int, std::string, int, float> tupleTest(10, "tuple", 5, 10.0 );
// std::get<0>(tupleTest) 튜플 원소 가져오기
printf("%d %s %d %f \n", std::get<0>(tupleTest), std::get<1>(tupleTest).c_str(), std::get<2>(tupleTest), std::get<3>(tupleTest) );
int a = 5;
std::string b= "tie";
int c = 7;
float d = 11.0;
// std::tie 튜플 값 가져오기
std::tie( a, b, c, d ) = tupleTest;
// std::make_tuple 튜플 값 복사
tupleTest = std::make_tuple(4, "makeTuple", 6, 3.0 );
printf("%d %s %d %f \n", std::get<0>(tupleTest), std::get<1>(tupleTest).c_str(), std::get<2>(tupleTest), std::get<3>(tupleTest) );
printf("a = %d, b = %s, c = %d d = %f \n", a, b.c_str(), c, d );
std::make_tuple : call-by-value
std::tie : call-by-reference
make_tuple 같은 경우는 std::move 사용
tuple의 크기는 = 가장 큰 타입크기 + ( 갯수 * 가장 큰 타입 크기 )
tuple size = std::tuple_size<decltype(tupleTest)>::value;
std::tuple<int, std::string, int, float> tupleTest2(10, "tuple", 5, 10.0 );
tuple 합치기 = std::tuple_cat(tupleTest, tupleTest2);