Home C++에서 연관된 두 가지 이상의 자료를 저장하려면?
Post
Cancel

C++에서 연관된 두 가지 이상의 자료를 저장하려면?

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의 차이점을 표로 정리해보면

특성pairtuple
요소의 수정확히 두 개의 요소만 저장두 개 이상의 요소 저장 가능
요소 타입두 요소는 서로 다른 타입일 수 있음각 요소는 서로 다른 타입일 수 있음
접근 방법firstsecond 멤버를 통해 접근std::get<>을 사용하여 접근
사용 용도두 데이터 항목을 함께 그룹화할 때 사용복잡한 데이터 구조를 다룰 때 사용
변경 가능성값 변경 가능값 변경 가능
표준 라이브러리<utility> 헤더에 정의<tuple> 헤더에 정의

이렇게 나타낼 수 있다

결론적으로 pair와 tuple은 다양한 타입의 데이터를 효율적으로 묶고 관리하는데 사용하며 pair는 간단한 데이터 쌍을 다룰 때 tuple은 더 복잡하고 다양한 데이터 구조를 필요로 할 때 사용하면 된다

This post is licensed under CC BY 4.0 by the author.

12월 9일 Today I Learned

12월 10일 Today I Learned