C++ - pair ( aka. vector / typedef / sort )

2022. 8. 8. 01:32STUDY/C++

반응형

* Pair 란? 

pair는, 두개의 값을 하나로 묶어주는 역할을 하는 struct로 데이터 쌍(pair)을 표현할 때 사용한다.

주로 vector로 묶어 2차원 배열처럼 사용하거나, 좌표를 표현할 때 사용된다. 

헤더는 algorithm , vector 에  utility 헤더가 포함되어 있기 때문에, 따로 추가 안해줘도 된다. 

pair의 기본 형태는 pair<[first], [second]> p_name; 으로 정의해준다. 

pair는 따로 초기화 하지 않고, make_pair 를 사용해 필요할 때 원소를 삽입하는 방식으로 사용한다.

 

* Pair 멤버 함수

  • p.first - pair의 첫번 째 인자를 반환한다.
  • p.second - pair의 두번 째 인자를 반환한다.
  • make_pair(val1, val2) - val1, val2를 가진 pair를 생성한다. 
  • algorithm sort를 통해 정렬이 가능하다. 
#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

typedef pair<int,int> PP;
bool compare(PP x, PP y) {
    return x.second < y.second;
}

int main() {
    pair<int, int> p1;
    // typedef pair<int, int> P; 처럼 표현도 가능하다.

    p1 = make_pair(10,20);
    cout << p1.first << '\n';
    cout << p1.second << '\n';

    pair<int,string> p2;
    p2 = make_pair(100, "Hello");
    cout << p2.first << '\n';
    cout << p2.second << '\n';

    cout << "=================" << '\n';

    /* VECTOR + PAIR */
    vector<pair<int, int> > vec;
    vec.push_back(make_pair(11,22));
    vec.push_back(make_pair(55,66));
    vec.push_back(make_pair(33,44));

    cout << vec[0].first << "," << vec[0].second << '\n';
    cout << vec[1].first << "," << vec[1].second << '\n';
    cout << vec[2].first << "," << vec[2].second << '\n';

    cout << "=================" << '\n';

    /* PAIR + SORT(base, no conditional) */
    sort(vec.begin(), vec.end());

    cout << vec[0].first << "," << vec[0].second << '\n';
    cout << vec[1].first << "," << vec[1].second << '\n';
    cout << vec[2].first << "," << vec[2].second << '\n';
    
         cout << "=================" << '\n';
 
     /* PAIR + SORT(conditional for second value) */
     vector<PP> vv;
 
     vv.push_back(make_pair(12,23));
     vv.push_back(make_pair(5,61));
     vv.push_back(make_pair(3,4));
 
     cout << vv[0].first << "," << vv[0].second << '\n';
     cout << vv[1].first << "," << vv[1].second << '\n';
     cout << vv[2].first << "," << vv[2].second << '\n';
 
     sort(vec.begin(), vec.end(), compare);
 
     cout << vv[0].first << "," << vv[0].second << '\n';
     cout << vv[1].first << "," << vv[1].second << '\n';
     cout << vv[2].first << "," << vv[2].second << '\n';
 
     return 0;
 }

 

 

 

 

 

 

728x90
반응형

'STUDY > C++' 카테고리의 다른 글

(C++) vector - accumulate, clear/erase, unique(+sort)  (0) 2022.08.18
C++ - vector of pairs / vector of vectors  (1) 2022.08.09
C++ - 수식 함수들  (0) 2022.08.07
C++ - deque  (0) 2022.08.07
c++ - stack/queue  (0) 2022.08.07