C++ Pair, Tuple

미니언·2023년 7월 8일
0

C++ Araboza

목록 보기
3/5
post-thumbnail

C++ Pair, Tuple에 관한 정보!

오늘은 뭔가 일회용으로 쓰일 줄 알고 따로 글을 안썼는데, 막상 엄청나게 썼던 pair에 대한 정보를 쓰려고 한다. 거기에 추가적으로 pair의 확장판 느낌인 tuple도 간단하게 소개하도록 하겠다!

일단 pair와 tuple을 사용하는 이유부터 간단히 얘기하자면, 우리가 어떤 정보를 쌍으로, 그니까 여러개를 한번에 묶어서 저장하고 싶은 상황이 종종 생긴다. 아래에서도 얘기하겠지만 좌표평면 위의 점의 좌표나, 어떤 사람의 정보(키, 몸무게 등) 등을 저장할때가 예가 될 수 있겠다. 물론 이런 경우에 보통 구조체를 많이들 쓴다. 근데 pair를 이용하면, 혹은 tuple을 이용하면 이를 좀 더 쉽고 편리하게 해결할 수 있다!!

Pair

일단 먼저 pair다. pair는 utility 헤더에 존재한다.

#include <utility>

근데 굳이 utility 헤더 include를 안해줘도 사용이 가능하다. 다만, tuple과 함께 사용하게 될 경우에는 반드시 include를 해줘야 한다.

pair는 make_pair를 이용해서 사용이 가능한데, 사실 그냥 이렇게 한쌍만 만들어서 쓰는 경우가 거의 없고, 대부분 벡터에서 사용한다. 뭐 예를 들어서 xy 평면 위의 점의 좌표를 여러 개 저장한다고 할 때 pair 형태로 만들어서 벡터에 저장하는 그런 느낌이다. 그래서 make_pair 함수는 그냥 설명 안하고 넘어가고, pair vector 사용법에 대해 쓰겠다.

먼저 선언은 다음과 같이 한다.

#include <utility>
#include <vector>

int main()
{
	vector<pair<type, type>> v;
}

저기서 type에는 내가 만들고자 하는 pair의 각 자료형을 넣어주면 된다. 아까 말한대로 점의 좌표라면 <int, int>일 것이고, 만약에 사람의 나이와 이름을 저장하는 거라면 <int, string> 이런 느낌이다.

저러면 이제 pair 형태의 정보를 갖는 벡터가 만들어지게 된다.

push의 경우, pair여도 결국 벡터니까 똑같이 push_back을 통해 넣어준다. 다만 pair 형태의 정보를 push해야 하므로 push는 다음과 같이 한다.

v.push_back({27, hello});

이런식으로 중괄호를 이용해서 묶어서 push_back 해준다.

그리고 각 원소에 접근할때는 first와 second를 사용한다. 가령 이런느낌이다.

cout<<v[3].first<<endl;
cout<<v[3].second<<endl;

참고로 first와 second 뒤에는 ()를 붙이지 않는다. 나만 실수하는 것일수도 있는데, 난 이 짓을 좀 많이 했다..

이 정도면 충분히 사용법을 알려준 것 같다. 나머진 그냥 벡터 사용하듯이 사용하면 된다!

Tuple

tuple도 간단히만 설명한다. tuple도 pair와 같은데 대신 두개가 아닌 세개의 정보를 저장한다. 이게 내가 알기론 모던 cpp 문법이다(피셜이라 전혀 신뢰성이 없음 ㅋ). 사용방법은 비슷비슷하다. 역시 벡터를 기준으로 설명하겠다.

일단 tuple 헤더를 include 해줘야 한다.

#include <tuple>

위에서도 말했듯이, tuple과 pair를 동시에 사용할 경우, 반드시 utility 헤더와 tuple 헤더 모두 include 해줘야 한다.

선언은 다음과 같이 한다.

#include <tuple>
#include <vector>

int main()
{
	vector<tuple<type, type, type>> v;
}

그리고 push_back 방법은 pair와 완전히 동일해서 생략하고, 각 원소에 접근은 당연히 first, second, third...일줄 알았지만 사실 아니고! pair와 좀 다르다.

cout<<get<0>(v[0])<<endl; // 첫번째 원소 출력
cout<<get<1>(v[0])<<endl; // 두번째 원소 출력
cout<<get<2>(v[0])<<endl; // 세번째 원소 출력

이런식으로 get을 이용해서 접근한다. tuple은 세개의 원소를 가지니까 get 1, 2, 3밖에 없다.
이 정도면 tuple도 기본적인 것들은 충분히 사용할 수 있을 것이다.

tuple은 사실 그렇게 자주 쓰진 않겠지만, pair는 내 생각과는 달리 굉장히 많이 썼다. 사용방법도 워낙 간단해서 사용법을 알아만 두면 요긴하게 잘 써먹을 수 있을 것이다!

profile
King BOB!!!!!!! 코딩의 신이 되자

0개의 댓글

관련 채용 정보