[C++] tuple
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개 이상의 값을 저장할 수 없음 | 여러 개의 값을 저장할 수 있어 유연 |