안녕하세요! BlockDMask 입니다.
이번에는 C++의 Pair 클래스에 대해 간단히 정리 해보려합니다.
클래스사용법, 함수 및 간단한 예제를 준비해봤습니다.
감사합니다.
1) Pair 클래스란.
- 두 객체를 하나의 객체로 취급 할 수 있게 묶어주는 클래스입니다.
- STL에서 데이터 "쌍"을 표현할때 사용.
- <utility> 헤더에 존재.
2) Pair 클래스 생김새.
- template <class T1, class T2> struct pair;
- template <typename T1, typename T2> struct pair;
T1 : first
T2 : second 로 구분합니다.
3) 멤버 함수 및 간단한 사용법.
- pair<[type1], [type2]> p
사용할 데이터 타입 1, 2를 넣고 그 타입의 pair 클래스인 p를 만듭니다. - p.first : p의 첫번째 인자를 반환해 줍니다.
- p.second : p의 두번째 인자를 반환해 줍니다.
- make_pair(변수1, 변수2) : 변수1과 변수2가 들어간 pair를 만들어줍니다.
- operator로 (==, !=, <, >, <=, >=)가 정의 되어있어서, 사용이 가능합니다.
- sort 알고리즘에 의해 정렬이 가능합니다.
(대소 비교 및 sort에의한 정렬에서 : 첫번째 인자 기준, 첫번째가 같으면 두번째인자로 판단)
4) 사용 예제
예제1) int, string 인 경우 + 대소비교.
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 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | #include<iostream> #include<utility> #include<string> using namespace std; void same(pair<int, string> a, pair<int, string> b){ if(a == b){ cout << "true" << endl; }else{ cout << "false" << endl; } } void comp(pair<int, string> a, pair<int, string> b){ if(a < b){ cout << "true" << endl; }else{ cout << "false" << endl; } } int main(void){ pair<int, string> p1 = make_pair(1,"BlockDMask"); pair<int, string> p2 = make_pair(3,"Dok2"); pair<int, string> p3 = make_pair(1,"BlockDMask"); cout << "p1.first : " << p1.first << endl; cout << "p1.second : " << p1.second << endl; cout << endl; cout << "p1 == p2 ? "; same(p1, p2); cout << "p1 == p3 ? "; same(p1, p3); cout << endl; cout << "p1 < p2 ? "; comp(p1, p2); cout << "p1 < p3 ? "; comp(p1, p3); return 0; } | cs |
예제1 결과)
예제2) vector 컨테이너의 타입으로 pair를 사용하는 경우. + 정렬(sort)
- typedef를 통해서 간단하게 타입을 축약 해서 사용할 수 있지만, 이해를 돕기위해 길게 사용했습니다.
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 26 27 28 29 30 31 32 33 34 | #include<iostream> #include<utility> #include<string> #include<vector> #include<algorithm> using namespace std; int main(void){ vector<pair<int, string> > v; v.push_back(pair<int, string>(3, "Dok2")); v.push_back(pair<int, string>(6, "DMask")); v.push_back(pair<int, string>(1, "Tiger JK")); v.push_back(pair<int, string>(4, "Block")); v.push_back(pair<int, string>(2, "banana")); v.push_back(pair<int, string>(2, "apple")); cout << "=== After sort === " << endl; vector<pair<int, string> >::iterator iter; for(iter = v.begin(); iter != v.end(); iter++){ cout << "[" << iter->first << "," << iter->second << "]" << endl; } cout << endl; sort(v.begin(), v.end()); cout << "=== After sort === " << endl; for(iter = v.begin(); iter != v.end(); iter++){ cout << "[" << iter->first << "," << iter->second << "]" << endl; } return 0; } | cs |
예제2 결과)
> 앞에 있는 first 인자부터 정렬이 되고, 같으면 뒤에 인자 (string의 경우 사전순)로 정렬됨을 banana와 apple을 보고 판단할 수 있습니다.
'<개인공부> > [C++]' 카테고리의 다른 글
[C++] list container 정리 및 사용법 (4) | 2017.07.25 |
---|---|
[C++] deque container 정리 및 사용법 (2) | 2017.07.23 |
[C++] vector container 정리 및 사용법 (41) | 2017.07.20 |
[C++] STL 이란. (0) | 2017.07.19 |
[C++] 예외처리 (Exception Handling, try catch) (3) | 2017.07.14 |
[C++] template(템플릿)에 관하여 2 (클래스 템플릿, 템플릿 특수화) (0) | 2017.07.12 |
[C++] template(템플릿) 에 관하여 1 (템플릿이란, 함수 템플릿) (20) | 2017.07.11 |
[C++] string 클래스 변환(atoi, c_str()) 등 정리 (5) | 2017.07.11 |