template < class T1, class T2 > struct pair;

std::pair는 위 코드에서 보는것 처럼 템플릿 구조체.

template<typename T> 이랑 template<class T> 동일한 의미.

현재는 typename을 쓰는것이 표준형식임. 호환성을 위해 과거에 사용하던 class로 표기법을 지원하고 있음.

(둘의 차이에 대한 정리글 링크)

(레퍼런스 링크)


헤더 파일

#include<utility>
#include<algorithm>
#include<vector>

결론적으론 std::pair는 위 헤더 3개중에 아무거나 include해도 됨.

사실 std::pair는 utility속에 들어있음.

그러나 algorithm과 vector헤더파일이 utility헤더를 포함하고 있기 때문에 셋 중 아무거나 include해도 됨.


생성 방법

pair<int, int> p; // int 타입 데이터 2개를 관리할 수 있는 pair 클래스의 p객체
pair<int, double> p;// int타입과 double 타입 데이터를 한번에 관리할 수 있는 pair 클래스의 p객체
pair<double, double> p;// 각 각의 double 타입 데이터를 한번에 관리할 수 있는 객체
pair<int, char> p;// int 타입과 char타입 테이터를 하나로 묶어서 관리할 수 있는 p객체

위와 같이 생성.

위 4가지 경우 말고도 다양하게 사용 가능.


기본 사용 방법

p.first //첫번째 인자 반환

p.second //두번째 인자 반환

make_pair(1,2) // (값1,값2)를 쌍으로하는 pair를 만들어서 반환합니다.

기본적인 사용방법.

pair<int,int> p;
p.first=1;
p.second=2; 

//(1,2)가 p에 저장됩니다.
pair<int,int> p;
p=make_pair(1,2);

//(1,2)가 p에 저장됩니다.

응용하자면 위와 같은 사용이 가능.

vector<pair<int,int>> v;

 for(int i=0; i<n; i++)
    {
        int x,y;
        cin>>x>>y;

        pair<int,int> temp=make_pair(x,y);
        v.push_back(temp);
    }

벡터와 함께 사용하면 유용하게 사용할 수 있음.


대소 비교

pair 오브젝트끼리 대소비교가 가능.

  1. 첫 번째 값을 비교. 만약에 같다면?
  2. 두 번째 값을 통해서 판단. 이것조차 같다면 false 반환
#include<iostream>
#include<vector>
using namespace std;

int main()
{
    int n;
    
    pair<int,int> p1=make_pair(1,10);
    pair<int,int> p2=make_pair(1,10);

    if(p1>p2)
    {
        cout<<"p1이 더 큼";
    }
    else
    {
        cout<<"p2가 p1 이하임";
    }
}

//같은 값일경우 false나옴. 따라서 else문쪽이 실행됨

위 예시는 같은 값을 지닌 pair끼리 비교했기 때문에 최종적으로 false가 나와서 else문이 실행됨.

뿐만아니라 다음과 같은 연산자가 사용 가능함.

img

카테고리:

업데이트:

댓글남기기