[C++ STL] Pair Container 사용법 정리 (With Vector, Typedef, Sort)

    반응형

    #1 Pair 정의 & 사용방법

    #2 Pair 멤버함수

    - p.first

    - p.second

    - make_pair(v1,v2)

    #3 Pair 사용예제

    - Pair & vector

    - Pair & typedef

    - Pair & sort (first 기준 정렬, second 기준 정렬)

     

    다음 글은 개인적인 공부내용을 정리하기 위해 작성된 것으로 잘못된 내용이 있을 수 있습니다. :)

    추가하거나 잘못된 내용이 있다면 지속적으로 수정해 나갈 예정입니다.

    벡터 컨테이너에 대한 이해가 부족하시다면 다음 포스팅을 읽고 와주세요. VECTOR


    #1 Pair 정의 & 사용방법

    ■ Pair 정의

    Pair는 두개의 객체(first, second)를 하나로 묶어주는 역할을 하는 struct로 데이터의 쌍을 표현할 때 사용한다.

    주로 벡터와 묶어 이차원 배열처럼 사용하거나, 좌표계를 표현할 때 사용되곤 한다.

     

    ■ Pair 사용방법

    ① #include <utility> - 유틸리티 헤더를 선언 한다.

    ② pair<[type first], [type second]> p_name - 사용할 데이터타입 두 가지를 넣어 주고, pair의 이름을 선언한다.

    pair는 초기에 따로 초기화하지 않으며, make_pair 멤버함수를 사용해 필요할 때 마다 원소를 넣어주는 방식으로 사용한다.

     

    #2 Pair 멤버함수

    p.first - p의 첫 번째 인자를 반환한다.

    ② p.second - p의 두 번째 인자를 반환한다.

    ③ make_pair(value1, value2) - value1, value2를 가진 pair를 생성한다.

    * operator (==, !=, < , <= , >, >=) 를 통한 비교연산이 가능하다.

    * algorithm stl - sort 를 통한 정렬이 가능하다.

    #include <iostream>
    #include <utility>
    using namespace std;
    
    int main()
    {
    	pair<int,int> p1; // <int,int> 타입 페어 생성  
    	p1 = make_pair(10,20); // (10,20) 페어 추가
    	cout << "<int,int> p1 \n";
    	cout << p1.first << endl; // 첫 번째 원소 (10) 출력
    	cout << p1.second << endl; // 두 번째 원소 (20) 출력 
    	
    	cout << "<int,stirng> p2 \n";
    	pair<int,string> p2; // <int,string> 타입 페어 생성
    	p2 = make_pair(100,"Hello"); // <100,"Hello") 페어 추가
    	cout << p2.first << endl; // 첫 번째 원소 (100) 출력
    	cout << p2.second << endl; // 두 번째 원소 ("Hello") 출력 
    	return 0;
    }
    [출력결과]
    <int,int> p1
    10
    20
    <int,stirng> p2
    100
    Hello

     

    #3 Pair 사용예제

    ■ pair & vector

    pair와 vector 컨테이너를 같이 사용한 예제이다.

    #include <iostream>
    #include <vector>
    #include <utility>
    using namespace std;
    
    int main()
    {
    	vector<pair<int,int>> v;
    	
    	v.push_back(make_pair(10,20));
    	v.push_back(make_pair(30,40));
    	v.push_back(make_pair(50,60));
    	
    	cout << v[0].first << " " << v[0].second << endl;
    	cout << v[1].first << " " << v[1].second << endl;
    	cout << v[2].first << " " << v[2].second << endl;
    	return 0;
    }
    [출력결과]
    10 20
    30 40
    50 60

     

    ■ pair & typedef

    typedef 문법을 이용해서, pair를 간략하게 표현 가능하다.

    앞의 vector 예제에서 pair 부분만 typedef로 바꾸어 선언한 예제이다. (출력 결과는 동일하다.)

    #include <iostream>
    #include <vector>
    #include <utility>
    using namespace std;
    
    typedef pair<int,int> P; // typedef pair
    
    int main()
    {
    	vector<P> v;
    	
    	v.push_back(make_pair(10,20));
    	v.push_back(make_pair(30,40));
    	v.push_back(make_pair(50,60));
    	
    	cout << v[0].first << " " << v[0].second << endl;
    	cout << v[1].first << " " << v[1].second << endl;
    	cout << v[2].first << " " << v[2].second << endl;
    	return 0;
    }

     

    ■ pair & sort

    pair는 algorithm의 sort를 이용해 정렬이 가능하다. sort의 세 번째 인덱스를 따로 지정해 주지 않으면, first 를 기준으로 정렬하고 비교함수를 구현해서 second 기준으로 정렬하는 것도 가능하다.

     

    - first 기준 정렬

    #include <iostream>
    #include <vector>
    #include <algorithm>
    #include <utility>
    using namespace std;
    
    typedef pair<int,int> P;
    
    int main()
    {
    	vector<P> v;
    	v.push_back(make_pair(10,20));
    	v.push_back(make_pair(50,40));
    	v.push_back(make_pair(30,60));
    	
    	cout << "[Before Sort]" << endl; 
    	cout << v[0].first << " " << v[0].second << endl;
    	cout << v[1].first << " " << v[1].second << endl;
    	cout << v[2].first << " " << v[2].second << endl;
    	
    	sort(v.begin(), v.end()); // first 기준 정렬
    	
    	cout << "[After Sort] First 기준 정렬" << endl; 
    	cout << v[0].first << " " << v[0].second << endl;
    	cout << v[1].first << " " << v[1].second << endl;
    	cout << v[2].first << " " << v[2].second << endl;
    	return 0;
    }
    [Before Sort]
    10 20
    50 40
    30 60
    [After Sort] First 기준 정렬
    10 20
    30 60
    50 40

     

    - second 기준 정렬

    내림차순 정렬은, compare 함수에서 부등호 방향을 반대로 바꿔주면 된다.

    #include <iostream>
    #include <vector>
    #include <algorithm>
    #include <utility>
    using namespace std;
    
    typedef pair<int,int> P;
    
    bool compare(P x, P y)
    {
    	return x.second < y.second;
    }
     
    int main()
    {
    	vector<P> v;
    	v.push_back(make_pair(10,20));
    	v.push_back(make_pair(50,10));
    	v.push_back(make_pair(30,60));
    	
    	cout << "[Before Sort]" << endl; 
    	cout << v[0].first << " " << v[0].second << endl;
    	cout << v[1].first << " " << v[1].second << endl;
    	cout << v[2].first << " " << v[2].second << endl;
    	
    	sort(v.begin(), v.end(), compare);
    	
    	cout << "[After Sort] Second 기준 정렬" << endl; 
    	cout << v[0].first << " " << v[0].second << endl;
    	cout << v[1].first << " " << v[1].second << endl;
    	cout << v[2].first << " " << v[2].second << endl;
    	return 0;
    }
    [Before Sort]
    10 20
    50 10
    30 60
    [After Sort] Second 기준 정렬
    50 10
    10 20
    30 60
    반응형

    댓글

    Designed by JB FACTORY