<개인공부>/[C++]

[C++] Pair 클래스 정리 및 예제 (vector, sort)

BlockDMask 2017. 7. 18. 15:35
반응형

  • 안녕하세요!  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<intstring> a, pair<intstring> b){
    if(a == b){
        cout << "true" << endl;
    }else{
        cout << "false" << endl;
    }
}
void comp(pair<intstring> a, pair<intstring> b){
    if(a < b){
        cout << "true" << endl;
    }else{
        cout << "false" << endl;
    }
}
 
int main(void){
    pair<intstring> p1 = make_pair(1,"BlockDMask");    
    pair<intstring> p2 = make_pair(3,"Dok2");    
    pair<intstring> 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<intstring> > v;
    
    v.push_back(pair<intstring>(3"Dok2"));    
    v.push_back(pair<intstring>(6"DMask"));    
    v.push_back(pair<intstring>(1"Tiger JK"));    
    v.push_back(pair<intstring>(4"Block"));    
    v.push_back(pair<intstring>(2"banana"));    
    v.push_back(pair<intstring>(2"apple"));    
    
    cout << "=== After sort === " << endl;
    
    vector<pair<intstring> >::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을 보고 판단할 수 있습니다.


반응형