페어(Pair)란?
#include <utility> 헤더 파일에 존재하는 STL이다.
하지만, algorithm, vector와 같은 헤더파일에서 이미 include하고 있기에 따로 utility를 include해 줄 필요는 없다.
pair를 사용하면 두 자료형 T1, T2를 묶을 수 있게 된다.
무조건 2개를 묶어야 하고 첫 번째 자료는 first, 두 번째 자료는 second로 접근이 가능하다.
pair의 기본 코딩 방식은 다음과 같다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #include <iostream> #include <cstdio> using namespace std; pair<int, char> p; int main() { p.first = 1; p.second = 'a'; printf("%d %c", p.first, p.second); return 0; } // This source code Copyright belongs to Crocus // If you want to see more? click here >> | Crocus |
make_pair :: pair를 만들어 주는 함수이다. p.first = x, p.second = y 이런식으로 대입하지 않고
p = make_pair(x, y);로 대입이 가능하다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #include <iostream> #include <cstdio> #include <utility> using namespace std; pair<int, char> p; int main() { p = make_pair(1, 'a'); printf("%d %c", p.first, p.second); return 0; } // This source code Copyright belongs to Crocus // If you want to see more? click here >> | Crocus |
vector에 넣을 때는 vector의 형식은 vector<pair<int, char>> 같은 형식을 취해야 한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | #include <iostream> #include <cstdio> #include <utility> #include <vector> using namespace std; pair<int, char> p; vector<pair<int, char>> vc; int main() { vc.push_back(make_pair(1, 'a')); printf("%d %c", vc[0].first, vc[0].second); return 0; } // This source code Copyright belongs to Crocus // If you want to see more? click here >> | Crocus |
typedef를 통해 pair를 재정의해 줄 수 있다.
보통 pair의 타입에 따라 int, char이면 pic, int, int이면 pii 이런식으로 지정하곤 한다.
재정의를 하게 되면 make_pair을 따로 쓰지 않고 pic(1,'a')처럼 이용할 수 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | #include <iostream> #include <cstdio> #include <utility> #include <vector> using namespace std; typedef pair<int, char> pic; vector<pic> vc; int main() { vc.push_back(pic(1,'a')); printf("%d %c", vc[0].first, vc[0].second); return 0; } // This source code Copyright belongs to Crocus // If you want to see more? click here >> | Crocus |
pair을 조금 쉽게 설명하자면 구조체와 비유하자면 아래 구조체와 같은 방식을 이루고 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | #include <iostream> #include <cstdio> using namespace std; template<typename T1, typename T2> struct PAIR { T1 first; T2 second; }; int main() { PAIR<int, char> p; p.first = 1; p.second = 'a'; printf("%d %c", p.first, p.second); return 0; } // This source code Copyright belongs to Crocus // If you want to see more? click here >> | Crocus |
template<typename T>와 T first, T second의 의미는
template를 통해 int, char 등등 다양한 타입이 올 수 있도록 한 것이고,
선언 시 PAIR<int> p;라고 하여 p.first, p.second를 나타낼 수 있게 된다.
이와 같이 pair는 따로 코더가 작성하지 않고 편리하게 2가지 자료형을 묶어 이용할 수 있는 좋은 STL이다.
참고로 pair을 sort 함수를 이용하여 정렬 할 때는(따로 정렬 방식을 지정해주지 않는 경우)
항상 first를 기준으로 우선 정렬하고, 그다음 first가 같을 경우 second를 기준으로 오름차순 정렬을 하게 된다.
'Applied > 자료구조' 카테고리의 다른 글
맵(Map) STL 사용 방법 (0) | 2017.02.20 |
---|---|
튜플(Tuple) STL 사용 방법 (2) | 2017.02.14 |
비트 연산자 및 비트 연산 응용 방법 (0) | 2017.02.11 |
배열을 이용한 이진 트리(Binary Tree) (0) | 2016.11.24 |
비트셋(Bitset) STL 사용 방법 (0) | 2016.11.22 |