Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++ 튜플(Tuple)과 페어(Pair)로 함수에서 여러 값 반환하기


함수에서 여러 값을 반환하는 방법

C나 C++에서는 기본적으로 함수가 한 번에 하나의 값만 반환할 수 있습니다. 여러 값을 반환해야 할 때 예전에는 포인터나 참조를 이용한 출력 매개변수(output parameter)를 함께 넘겨야 했지만, C++에서는 STL이 제공하는 튜플(tuple)페어(pair)를 활용하면 훨씬 깔끔하게 해결할 수 있습니다.

튜플(Tuple)과 페어(Pair)란?

튜플(tuple)은 여러 개의 요소를 하나로 묶어 담을 수 있는 객체입니다. 각 요소는 서로 다른 타입이어도 되며, 담을 수 있는 값의 개수에도 사실상 제한이 없습니다.

페어(pair)는 두 개의 값을 하나의 세트로 묶는 객체입니다. 두 값의 타입이 달라도 상관없으며, 정확히 두 개의 값만 가질 수 있다는 점에서 '요소가 두 개뿐인 특수한 형태의 튜플'이라고 볼 수 있습니다.

그럼 실제 예제를 통해 튜플과 페어가 어떻게 동작하는지 살펴보겠습니다.

예제 코드

#include<iostream>
#include<tuple>
#include<utility>
using namespace std;

// 값들을 묶어 튜플로 만든 뒤 반환하는 함수
tuple<int, string, char> my_function_tuple(int x, string y) {
    return make_tuple(x, y, 'A');
}

// 값들을 묶어 페어로 만든 뒤 반환하는 함수
std::pair<int, string> my_function_pair(int x, string y) {
    return std::make_pair(x, y);
}

main() {
    int a;
    string b;
    char c;

    // tie()로 튜플의 요소들을 각 변수에 언패킹
    tie(a, b, c) = my_function_tuple(48, "Hello");

    // 함수가 반환한 페어를 받아옴
    pair<int, string> my_pair = my_function_pair(89, "World");

    cout << "Values in tuple: ";
    cout << "(" << a << ", " << b << ", " << c << ")" << endl;

    cout << "Values in Pair: ";
    cout << "(" << my_pair.first << ", " << my_pair.second << ")" << endl;
}

실행 결과

Values in tuple: (48, Hello, A)
Values in Pair: (89, World)

코드 핵심 정리

  • make_tuple() : 인자로 전달한 값들을 묶어 튜플을 생성합니다.
  • make_pair() : 인자로 전달한 두 값을 묶어 페어를 생성합니다.
  • tie(a, b, c) : 함수가 반환한 튜플을 받아 각 요소를 변수 a, b, c에 풀어 넣습니다(언패킹).
  • 페어의 값은 .first(첫 번째), .second(두 번째) 멤버로 접근합니다.

더 알아두기 : C++17 구조적 바인딩

C++17부터는 tie() 대신 구조적 바인딩(structured bindings) 문법을 사용해 더욱 간결하게 표현할 수 있습니다.

auto [a, b, c] = my_function_tuple(48, "Hello"); // 튜플 언패킹

또한 std::get<인덱스>(튜플)을 사용하면 특정 위치의 요소에 직접 접근할 수 있습니다. 예를 들어 std::get<0>(t)는 튜플 t의 첫 번째 요소를 반환합니다. 이처럼 튜플과 페어를 활용하면 출력 매개변수 없이도 함수의 결과를 명확하고 안전하게 여러 개 전달할 수 있습니다.