tuple

  • 다양한 타입의 여러값을 하나의 객체로 묶어서 저장할 수 있는 컨테이너
  • 다른 자료형의 여러 데이터를 하나로 묶는 자료구조
  • pair의 확장된 버전

특징

  • 다양한 자료형을 함께 저장 가능
    • tuple은 서로 다른 자료형의 값을 하나로 묶을 수 있다.
  • 고정된 크기
    • tuple의 크기는 선언할 때 고정되며, 이후에 변경할 수 없다.
  • 값에 접근할 때 get<N>() 사용
    • tuple의 특정 위치에 있는 값을 가져올 때는 get<N>()을 사용한다.

tuple 선언과 초기화

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

int main() {
    // 서로 다른 자료형의 값들을 묶어서 저장
    tuple<int, double, string> myTuple = make_tuple(10, 3.14, "Hello");

    // std::get<N>()으로 값에 접근
    cout << get<0>(myTuple) << endl; // 10
    cout << get<1>(myTuple) << endl; // 3.14
    cout << get<2>(myTuple) << endl; // Hello

    return 0;
}
  • tie로 쉽게 값을 풀어낼 수 있음
    • tie를 사용하여 tuple의 값을 각각의 변수에 한번에 대입할 수 있다.
#include <iostream>
#include <tuple>
using namespace std;

int main() {
    tuple<int, double, string> myTuple = make_tuple(10, 3.14, "Hello");

    int a;
    double b;
    string c;
    tie(a, b, c) = myTuple;

    cout << "a: " << a << ", b: " << b << ", c: " << c << endl; // a: 10, b: 3.14, c: Hello

    return 0;
}

예제

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

int main() {
    queue<tuple<int, int, int>> q;  // (x, y, z) 좌표를 저장하는 큐

    q.emplace(1, 2, 3);  // (1, 2, 3) 좌표 추가
    q.emplace(4, 5, 6);  // (4, 5, 6) 좌표 추가

    while (!q.empty()) {
        int x, y, z;
        tie(x, y, z) = q.front();  // 튜플에서 좌표 꺼내기
        q.pop();

        cout << "x: " << x << ", y: " << y << ", z: " << z << endl;
    }

    return 0;
}

// x: 1, y: 2, z: 3
// x: 4, y: 5, z: 6

pair vs tuple

특징 pair tuple
저장 가능 개수 2개 (항상 2개 고정) 원하는 개수만큼 가능
저장 가능 자료형 서로 다른 두 자료형 서로 다른 여러 자료형
값 접근 방법 .first, .second로 접근 get<N>()로 접근
유연성 2개 이상의 값을 저장할 수 없음 여러 개의 값을 저장할 수 있어 유연

Tags:

Categories:

Updated: