안녕하세요. 오늘은 알아두면 유용한 C++의 Pair 클래스를 소개해겠습니다.
1. pair 클래스
Pair 클래스는 사용자가 지정한 2개의 타입의 데이터를 저장하는데 사용합니다.
서로 연관된 2개의 데이터를 한 쌍으로 묶어서 다룰 때 사용하면 편리합니다.
제가 Pair 클래스를 알기 전에는 서로 연관된 2개의 데이터를 다룰 때, 구조체를 따로 정의했었습니다.
여간 번거로운게 아니었습니다. 그러나!!! Pair 클래스를 이용함으로써 서로 다른 2개의 연관된 2개의 데이터를
편리하게 관리할 수 있게 되었습니다.
2. pair의 헤더파일
pair 클래스는 #include<utility> 라는 헤더파일에 존재하는 STL입니다.
#include<utility> // pair의 헤더파일
그러나, 저는 pair를 사용할 때, #include<utility> 를 사용하지는 않고, vector 헤더파일을 주로 사용합니다.algorithm, vector 헤더파일에 utility 헤더파일이 이미 포함되어 있기 때문입니다.
그래서, 저는 보통 아래의 헤더파일들을 사용합니다.
#include<algorithm> // utility 헤더파일이 포함됨.
#include<vector> // utility 헤더파일이 포함됨.
2. pair 클래스의 형태
template <class T1, class T2> struct pair;
pair 클래스의 형태는 위와 같습니다.
T1, T2는 아래와 같이 접근을 합니다.
T1 : first
T2 : second
3. 함수의 사용법
- pair<type1,type2> p
pair 클래스의 객체 p를 생성합니다. 객체 이름은 p가 아니어도 상관없습니다.
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객체
- p.first
p의 첫번째 인자를 반환합니다. - p.second
p의 두번째 인자를 반환합니다. - make_pair(값1, 값2)
값1, 값2를 한쌍으로 하는 pair를 만들어서 반환합니다.
4.예제 코드
아래는 p.first와 p.second의 사용 예제 코드입니다.
#include<iostream>
#include<vector>
using namespace std;
pair<int, double> p;
int main()
{
p.first = 1; //pair의 첫번째 인자에 접근
p.second = 2.1; //pair의 두번째 인자에 접근
cout<<"first value: "<<p.first<<endl;
cout<<"second value: "<<p.second<<endl;
return 0;
}
실행결과는 아래와 같습니다.
make_pair에 대해서 알아봅시다.
위의 예제의 경우는 pair 객체 p를 만든다음, 각각의 요소에 p.first, p.second를 이용해서 각각 값을 대입했습니다.
이런 방식말고, 아래와 같은 방식으로도 가능합니다.
p = make_pair(1, 2.1); //p.first = 1, p.second = 2.1과 동일
pair를 그 자체로 사용하지 않고, vector와 함께 많이 사용하기도 합니다.
예제 코드입니다.
typedef pair<int,int> p;
vector<p> arr;
또는 아래와 같이도 가능합니다.
vector<pair<int,int>> arr;
/*************
typedef pair<int, int> p;
vector<p> arr;
서로 동일하다.
*************/
pair객체의 대소 비교를 할 수 있습니다.
pair 객체 간의 대소 비교를 진행하는 경우,
제일 먼저 첫번째 값을 비교하고, 첫번째 값이 같으면 두번째 값을 통해서 판단합니다.
아래는 비교 연산을 한 결과입니다.
#include<iostream>
#include<vector>
using namespace std;
void compare(pair<int, int> a, pair<int, int> b)
{
if (a > b)
cout << "첫 번째 인자가 더 큼." << endl;
else
cout << "두 번째 인자가 더 큼." << endl<<endl;
}
int main()
{
pair<int, int> a;
pair<int, int> b;
a = make_pair(2, 4);
b = make_pair(1, 5);
cout << "<a의 first가 b의 frist보다 큰 경우>" << endl;
compare(a, b); //first를 비교
a = make_pair(2, 7);
b = make_pair(2, 10);
cout << "<a의 first와 b의 frist가 같은 경우>" << endl;
compare(a, b); //second를 비교
return 0;
}
실행결과)
위의 내용을 종합적으로 사용하는 예시 코드를 들어 보겠습니다.
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
bool compare(pair<int, int> a, pair<int, int> b);
pair<int, int> p;
vector <pair< int, double >> q;
int main()
{
p.first = 1; //pair의 첫번째 인자에 접근
p.second = 10; //pair의 두번째 인자에 접근
cout << " p first value: " << p.first << endl;
cout << "p second value: " << p.second << endl<<endl;
p = make_pair(3, 4); //make_pair를 이용한 방법
cout << "*****make_pair을 이용한 방법*****" << endl;
cout << " p first value: " << p.first << endl;
cout << "p second value: " << p.second << endl<<endl;
cout << "**********vector와 pair를 함께 사용하는 방법*********" << endl;
q.push_back(make_pair(1, 1.2));
q.push_back(make_pair(3, 2.2));
q.push_back(make_pair(4, 3.2));
q.push_back(make_pair(2, 4.2));
for (int i = 0; i < q.size(); i++)
{
cout << "first: " << q[i].first << ", second: " << q[i].second << endl;
}
cout << endl;
sort(q.begin(), q.end(), compare); //sort를 이용해서 정렬
cout << "**********정렬 후*********" << endl;
for (int i = 0; i < q.size(); i++)
{
cout << "first: " << q[i].first << ", second: " << q[i].second << endl;
}
return 0;
}
bool compare(pair<int, int> a, pair<int, int> b)
{
return a.first < b.first;
}
실행결과)
vector와 pair를 같이 사용한 경우의 예시에서 algorithm 헤더에 있는 sort 함수를 사용해서 저런 식으로도
사용할 수 있다는 것을 보여주고 싶었습니다.
지금까지 Pair 클래스 사용법에 대해서 알아봤습니다.
'컴퓨터 > C\C++' 카테고리의 다른 글
[C/C++]C++ 이차원 배열 동적할당 (0) | 2021.07.11 |
---|---|
[c언어/c++] isdigit 함수(숫자를 판별하는 함수) (0) | 2021.05.15 |
[C++]1-1.상속(Inheritance)[feat. 급여관리] (0) | 2021.05.07 |
C/C++ : static 선언에 대하여 (0) | 2021.03.02 |