[C++] Tuple

Ghyeok·2025년 10월 22일

C++

목록 보기
13/16

Tuple(튜플)이란 여러가지 데이터 타입을 하나로 묶는 C++ 표준 라이브러리(STL)의 템플릿 클래스 중 하나이다. pair는 2가지 데이터 타입을 하나로 묶지만, Tuple은 2가지 이상의 데이터 타입을 원하는 개수만큼 묶을 수 있다.


사용법

1. 튜플 선언

#include <Tuple>
tuple<int, float, string> myTuple1(10, 3.14, "Pi");
tuple myTuple2 = make_tuple(10, 3.14, "Pi");

튜플의 생성자를 이용해 튜플을 선언하고 초기화 할 수 있다.
또한 make_tuple() 함수를 통해서도 튜플을 선언할 수 있다.

2. 튜플 원소 접근

cout<< get<0>(myTuple1); // 10
cout<< get<1>(myTuple1); // 3.14
cout<< get<2>(myTuple1); // Pi

get<>() 함수를 통해 튜플의 원소에 접근할 수 있다.
<>안에는 인덱스가 들어가고, ()에는 접근하려는 튜플의 이름이 들어간다.

auto[id, value, name] = myTuple1;
cout<< id << value << name // 10 3.14 Pi

auto&[id, value, name] = myTuple1;
id = 100;
cout<<get<0>(myTuple1); // 100

또한 auto 키워드를 통해 튜플의 각 요소들을 개별 변수로 분리할 수 있다. 이때 튜플의 각 요소들의 값은 참조가 아닌 복사되기 때문에, & 연산자를 통해 참조로 받아 수정할 수도 있다.

int x;
float y;
string s;

tie(x,y,s) = myTuple1;
cout << x << y << s // 10 3.14 Pi

tie() 함수를 통해서도 튜플의 각 요소들의 분리할 수 있다. 이때 각 요소에 맞는 데이터 타입의 변수를 선언해야 하는 점을 주의해야 한다.

3. 튜플 합치기

tuple<int, float> t1(10, 3.14);
tuple<char, string> t2('a' , "Hello");
tuple<int, float, char, string> t3 = tuple_cat(t1,t2);
auto t4 = tuple_cat(t2, t3); // tuple<char, string, int, float, char, string>

tuple_cat() 함수를 통해 튜플을 합칠 수 있다. 첫번째 인자로 오는 튜플 뒤에 그 다음 인자로 오는 튜플이 붙는다.

4. 튜플 교체

tuple<int, char> t1(1,'a');
tuple<int, char> t2(9,'z');
swap(t1,t2);
cout<<get<0>(t1); // 9
cout<<get<1>(t2); // a

swap() 함수를 통해 튜플의 값을 효율적으로 교환할 수 있다. 이때 교환하려는 두 튜플의 데이터 타입은 모두 같아야 한다.

5. 튜플 비교 연산자
튜플을 기본적으로 < , <= , != , == 등의 비교 연산자를 지원한다.
0번 인덱스부터 차례대로 비교하고, 0번 인덱스가 다르면 그 비교값이 전체 튜플을 비교한 결과가 된다. 만약 같다면 1번 인덱스로 넘어가서 비교한다.


사용 사례

튜플은 3가지 이상의 데이터 타입을 한번에 묶어서 관리해야 하는 경우 사용할 수 있다.
함수에서 여러 가지의 값을 한번에 반환해야 할 때 튜플을 사용할 수 있다.
또한 map, set 등에서 여러 가지 값을 조합하여 하나의 키로 사용해야 할 때 튜플을 사용할 수 있다.

0개의 댓글