[C++] 쌍으로 저장(std::pair)
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 오브젝트끼리 대소비교가 가능.
- 첫 번째 값을 비교. 만약에 같다면?
- 두 번째 값을 통해서 판단. 이것조차 같다면 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문이 실행됨.
뿐만아니라 다음과 같은 연산자가 사용 가능함.
댓글남기기