Skip to content

2014 08 12 튜플

krikit edited this page Nov 26, 2014 · 1 revision

튜플

기존의 C++ 표준 라이브러리에는 pair 템플릿 클래스가 (여전히) 있고 first와 second로 접근할 수 있습니다. 이걸 가지고 예전의 scheme에서 car, cdr, cdar, ... 등을 흉내내어 사용했던 기억도 있습니다. ^^;

C++11에는 tuple이라는 새로운 템플릿 클래스가 제공됩니다. 아래 코드를 보시죠.

#include <tuple>

int main(int argc, char** argv) {
  typedef std::tuple<int, double, std::string> triple_t;
  triple_t triple1(1, 2.2, "three");

  std::cout << std::get<0>(triple1) << std::endl;    // 1
  std::cout << std::get<1>(triple1) << std::endl;    // 2.2
  std::cout << std::get<2>(triple1) << std::endl;    // three

  return 0;
}

혹은, make_tuple 함수를 통해 편하게 튜플을 생성할 수도 있습니다.

int first = 1;
double second = 2.2;
std::string third = "three";
auto triple2 = std::make_tuple(first, std::ref(second), std::cref(third));
std::get<1>(triple2) += 1.1;
std::cout << std::get<1>(triple2) << std::endl;    // 3.3

참고로, ref는 참조형을 cref는 const 참조형 타입을 지정할 때 사용하면 됩니다.

tuple_cat 함수를 이용하면 두 튜플을 연결할 수도 있습니다.

auto tuple1 = std::make_tuple(1, "two");
auto tuple2 = std::make_tuple(3.3, "four");
auto tuple12 = std::tuple_cat(tuple1, tuple2);
std::cout << std::get<3>(tuple12) << std::endl;    // four
Clone this wiki locally