코딩을 하다가 (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<>() 함수를 통해서 요소에 접근하는 것도 똑같다.
'C++' 카테고리의 다른 글
[C++] vector (벡터) 정렬, 배열 정렬하기 (0) | 2020.02.03 |
---|---|
[C++] <set> 라이브러리, set 사용법 (0) | 2020.01.30 |
[C++] 포인터 사용 시 주의 사항 (0) | 2020.01.30 |
[C++] 포인터 (1) | 2020.01.27 |
[C++] 문자열, string 클래스의 모든 것 (0) | 2020.01.26 |