01/10/2018, 15:38

Lấy phần tử thứ n trong 1 tuple

Cho mình hỏi làm sao để lấy giá trị 1 phần tử trong hàm tuple trong C++?

VD:

std::tuple<int, float, std::string, int> tpl {4, 6.6, "hello", 7};

Mình search google không ra, nên nhờ mọi người giúp đỡ.

viết 17:44 ngày 01/10/2018

xài std::get

int         a = std::get<0>(tpl);
float       b = std::get<1>(tpl);
std::string c = std::get<2>(tpl);
int         d = std::get<3>(tpl);

.
có thể get theo kiểu dữ liệu, nhưng nếu tuple có 2 phần tử cùng kiểu dữ liệu trở lên thì ko compile được

float       b = std::get<float>(tpl);
std::string c = std::get<std::string>(tpl);

.
nếu muốn tách tất cả các phần tử ra thì có thể xài std::tie

int         a;
float       b;
std::string c;
int         d;
std::tie(a, b, c, d) = tpl;

.
nếu muốn tách tất cả mà bỏ qua chỉ 1 vài phần tử có thể xài chung với std::ignore

int   a;
float b;
int   d;
std::tie(a, b, std::ignore, d) = tpl;

.
nếu xài C++17 thì có thể viết gọn: http://en.cppreference.com/w/cpp/language/structured_binding

auto  [a, b, c, d] = tpl; //a,b,c,d lần lượt là các copy của các phần tử trong `tpl`
auto& [a, b, c, d] = tpl; //a,b,c,d là tham chiếu tới các phần tử trong tpl
Bài liên quan
0