c++

std::pair, std::tuple

에브리피플 2015. 1. 6. 11:34

//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);