C++을 사용해서 코딩을 하다보면 어느 순간 연관된 두 가지 이상의 자료를 하나로 그룹화하여 저장하고 싶을 때가 있을 것이다 그럴 땐 사용할 수 있는 것이 바로 C++의 pair와 tuple로 이번 글에선 이 두 구조체에 대해 알아보려고 한다
pair란?
pair는 C++에서 두 개의 요소를 저장할 수 있는 구조체로 보통 두 데이터가 논리적으로 연관되어 있을 때 사용한다 예를 들자면 학생의 이름과 그 학생의 성적이나 마트의 물건 이름과 가격을 들 수 있다
pair 사용법
우선 pair를 사용하기 위해서는 utility 헤더를 include 시켜주는게 필요하다 그 뒤
1
std::pair<타입, 타입> 이름;
이런 식으로 pair에 사용할 타입과 이름을 적어 선언해주면 된다
이러한 pair에 값을 넣기 위해서는
1
std::pair<타입, 타입> 이름(값, 값);
이렇게 선언과 동시에 값을 넣거나
1
2
3
4
5
6
7
8
9
// 첫 번째
이름 = {값, 값};
// 두 번째
이름 = std::make_pair(값, 값);
// 세 번째
이름.first = 값;
이름.second = 값;
선언 이후 이렇게 다양한 방법으로 넣을 수도 있다
이러한 pair의 값을 사용하기 위해서는 앞서 값을 넣을 때 봤던 것처럼
1
2
값.first;
값.second;
이렇게 first, second로 접근하여 사용하거나
1
std::tie(변수1, 변수2, 변수3) = pair이름;
std에 있는 tie 함수를 통해 변수에 값을 넣어 사용할 수도 있다
pair 예제
마지막으로 pair 예제를 살펴보면
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
#include <utility>
int main() {
std::pair<std::string, int> student("김철수", 90);
std::cout << "학생 이름: " << student.first;
std::cout << "\n시험 점수: " << student.second;
return 0;
}
위 예제는 학생의 이름과 시험 점수를 pair로 묶어서 관리하는 코드이다
tuple이란?
tuple은 C++에서 두 개 이상의 요소를 저장할 수 있는 구조체로 pair보다 좀 더 일반화된 형태이며 pair보다 더 복잡하고 많은 데이터를 그룹화해야 할 때 사용한다
tuple 사용법
우선 tuple을 사용하기 위해서는 tuple 헤더를 include 시켜주는게 필요하다 그 뒤
1
std::tuple<타입, 타입, 타입> 이름;
이런 식으로 tuple에 사용할 타입들과 이름을 적어 선언해주면 된다
이러한 tuple에 값을 넣기 위해서는
1
std::tuple<타입, 타입, 타입> 이름(값, 값, 값);
이렇게 선언과 동시에 값을 넣거나
1
이름 = std::make_tuple(값, 값, 값);
선언 이후 make_tuple으로 넣을 수도 있다
이러한 tuple의 값을 사용하기 위해서는
1
std::get<인덱스>튜플 이름;
이렇게 get으로 접근하여 사용하거나
1
std::tie(변수1, 변수2, 변수3) = pair이름;
앞서 pair처럼 tie 함수를 통해 변수에 값을 넣어 사용할 수도 있다 보통 get 방식은 불편하기에 주로 tie 방법을 사용한다
tuple 예제
마지막으로 tuple 예제를 살펴보면
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <tuple>
int main() {
std::tuple<int, std::string, float> student(1, "김철수", 90.2);
int id;
std::string name;
float score;
std::tie(id, name, score) = student;
std::cout << "ID: " << id << "\n이름: " << name << "\n시험 점수: " << score;
return 0;
}
위 예제는 학생의 id와 이름, 시험 점수를 tuple로 묶어서 관리하는 코드이다
정리
마지막으로 pair와 tuple의 차이점을 표로 정리해보면
특성 | pair | tuple |
---|---|---|
요소의 수 | 정확히 두 개의 요소만 저장 | 두 개 이상의 요소 저장 가능 |
요소 타입 | 두 요소는 서로 다른 타입일 수 있음 | 각 요소는 서로 다른 타입일 수 있음 |
접근 방법 | first 와 second 멤버를 통해 접근 | std::get<> 을 사용하여 접근 |
사용 용도 | 두 데이터 항목을 함께 그룹화할 때 사용 | 복잡한 데이터 구조를 다룰 때 사용 |
변경 가능성 | 값 변경 가능 | 값 변경 가능 |
표준 라이브러리 | <utility> 헤더에 정의 | <tuple> 헤더에 정의 |
이렇게 나타낼 수 있다
결론적으로 pair와 tuple은 다양한 타입의 데이터를 효율적으로 묶고 관리하는데 사용하며 pair는 간단한 데이터 쌍을 다룰 때 tuple은 더 복잡하고 다양한 데이터 구조를 필요로 할 때 사용하면 된다