코딩을 하다가 (x, y) 이런 순서쌍이 필요할 수도 있고 세 가지 정보를 묶어서 저장해야 할 수도 있다.

이럴 때 <tuple> 라이브러리를 사용하면 편리하다.

2-tuple은 주로 pair라고 부른다. 튜플에는 2-tuple(pair), 3-tuple, 4-tuple, 5-tuple, 6-tuple 등이 있는데 튜플이란 여러가지를 묶은 거라고 보면 된다.

 

튜플을 사용하려면 #include <tuple>을 써서 <tuple> 헤더파일을 포함해야 한다.

 

pair(2-tuple)를 만들고 싶으면 make_pair(a, b) 이런 식으로 사용하면 된다.

그리고 make_pair의 반환 타입은 pair<T1, T2> 템플릿(제네릭) 클래스이다.

2-tuple인 pair 생성 및 선언 방법은 다음과 같다.

pair<int, int> p = make_pair(1, 3);

두 개의 타입이 모두 같은 타입이 아니여도 된다.

pair<int, double> p = make_pair(1, 3.5);

템플릿이 T1, T2로 다르기 때문에 이렇게 서로 다른 타입의 데이터를 하나의 pair로 묶는 것도 가능하다.

 

그러면 p 객체에서 첫번째 요소인 1을 읽어오거나 두 번째 요소인 3의 값을 변경하고 싶을 때에는 어떻게 할까?

저장된 pair 객체에 저장된 요소 각각에 접근하고 싶을 때에는

p.first
p.second

이렇게 사용하면 된다.

 

#include <iostream>
#include <tuple>
using namespace std;

int main(){
	pair<int, int> p = make_pair(1, 3);
	cout << p.first << endl;
	cout << p.second << endl;
	return 0;
}

이 코드의 실행 결과는 다음과 같다.

정리하자면 pair를 만들 때에는 make_pair() 함수를 쓰면 되고 저장할 때에는 pair<T1, T2> 타입으로 저장한다.

저장한 요소에 접근할 때에는 pair 객체.first, pair 객체.second 이렇게 읽어올 수 있다.

 

그럼 3-tuple을 만드는 방법을 알아보자.

 

3-tuple 생성 및 선언 방법은 다음과 같다.

tuple<int, int, int> t = make_tuple(1, 2, 3);

pair와 마찬가지로 튜플도 3개의 타입이 모두 같지 않아도 된다.

 

그럼 저장한 1, 2, 3 요소 각각에 접근하고 싶을 때에는 어떻게 할까?

아까 pair는 first, second를 이용했지만 tuple은 get<>() 함수를 이용한다.

사용 방법은

get<접근할 요소의 인덱스>(튜플 객체)

이다.

#include <iostream>
#include <tuple>
using namespace std;

int main(){
	tuple<int, int, int> t = make_tuple(1, 2, 3);
	cout << get<0>(t) << endl;
	cout << get<1>(t) << endl;
	cout << get<2>(t) << endl;
	return 0;
}

이 코드를 실행하면

이런 결과가 나온다.

 

4-tuple, 5-tuple, 6-tuple도 마찬가지로 하면 된다. make_tuple() 함수를 이용해서 만들면 되고 get<>() 함수를 통해서 요소에 접근하는 것도 똑같다.

+ Recent posts