pair / tuple 다루기

pair<int,int> / tuple<int,int,int>

좌표, (값,인덱스) 묶음 등 두 개 이상 값을 묶어 다룰 때 쓰는 법

pair 기본

pair<int, int> p = {1, 2};
cout << p.first << " " << p.second;

// 벡터에 담아서 좌표/값 쌍으로 관리
vector<pair<int,int>> coords;
coords.push_back({1, 2});
coords.emplace_back(3, 4); // push_back보다 복사 한 번 덜 함

pair 자동 비교

// pair는 first 기준, 같으면 second 기준으로 기본 비교 연산자 지원
sort(coords.begin(), coords.end()); // first 오름차순, 같으면 second 오름차순

tuple (3개 이상 묶을 때)

tuple<int, int, int> t = {1, 2, 3};
cout << get<0>(t) << " " << get<1>(t) << " " << get<2>(t);

// 구조분해로 더 편하게
auto [a, b, c] = t;

구조분해 (C++17)

pair<int, int> p = {1, 2};
auto [x, y] = p; // x=1, y=2

주의사항

get<0>(t)처럼 인덱스로 접근하면 값이 뭘 의미하는지 코드만 봐선 알기 어렵다. 값이 3개를 넘어가거나 의미가 헷갈리면 struct로 이름 붙여 관리하는 게 나중에 디버깅할 때 편하다.