본문 바로가기

씨플플

[C++] pair 클래스에 대해서 (+ tuple)

pair 클래스두 객체를 하나의 객체로 취급할 수 있게 묶어주는 역할!

 

 

생김새는 template <class T1, class T2> struct pair; 와 같은데 <utility> 헤더파일에 존재하며 두 객체 중 첫번째 T1을 first, 두번째 T2를 second로 구분할 수 있다.

 

멤버함수

 

1) pair<int, int> p; : 2개의 int형 변수를 가지는 pair 쌍 'p'를 생성한다.

2) make_pair(3, 4); 3과 4를 가지는 pair쌍을 생성한다.

3) pair.fisrt, pair.second : 각각 1번째 객체, 2번째 객체를 반환한다.

4) get<0>(p), get<1>(p) : 각각 p의 1번째 객체, 2번째 객체를 반환한다. (사실 잘 쓰지 않는다)

 

또한 기본적으로 pair 클래스의 대소비교는 1. first(1번째 인자) , 2. second(2번째 인자) 순으로 비교가 이뤄지기 때문에 pair 클래스를 저장하는 배열이나 벡터 등이 sort 함수를 사용해서 정렬을 할 때 해당 방법대로 정렬!

#include <iostream>
#include <utility>
#include <vector>
#include <algorithm>
int main()
{
	std::vector<std::pair<int, int>> v;
	v.push_back(std::make_pair(2, 1));
	v.push_back(std::make_pair(1, 3));
	v.push_back(std::make_pair(1, 2));

	sort(v.begin(), v.end());

	for (int i = 0; i < v.size(); i++)
		std::cout << v[i].first << ' ' << v[i].second << '\n';
}

 

 


+tuple

 

pair 클래스가 2개의 객체만을 저장했다면 그 이상의 객체를 저장할 수 있는게 tuple이다!!

 

#include <iostream>
#include <string>
#include <tuple>
using namespace std;
tuple<string, int> get_person()
{
	int age;
	string name;
	cout << "이름을 입력하세요: ";
	cin >> name;
	cout << "나이를 입력하세요: ";
	cin >> age;

	return make_tuple(name, age);
}

int main()
{
	tuple<string, int> person;
	person = get_person();  

	cout << get<0>(person) << '\n';
	cout << get<1>(person) << '\n';
}