#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
'Archive2 > C&C++' 카테고리의 다른 글
[C++ STL] Deque Container 사용 방법 & 관련 예제 총 정리 (0) | 2021.05.10 |
---|---|
[C++ STL] sort 정렬 함수 사용 방법 정리 (오름차순 & 내림차순) (0) | 2021.05.09 |
[C++ STL] Queue Container 사용법 정리 (0) | 2021.05.06 |
[C/C++] Queue(큐) 자료구조 정리 (1) | 2021.05.06 |
[C++ STL] Vector Container 사용 방법 & 관련 예제 총 정리 (0) | 2021.04.25 |