[STL] std::tuple, std::make_tuple, std::tie, std::ignore
std::tuple
μ°λ¦¬κ° STL 컨ν μ΄λλ₯Ό μ¬μ©ν λ, 보ν΅μ ν κ°μ§ νμ μΌλ‘ μ μ₯ν©λλ€. std::arrayμ std::vector, std::setμ νλμ ν νλ¦Ώ μΈμλ₯Ό λ°κ³ , std::map, std::pairλ keyμ value, firstμ secondλ‘ λ κ°μ νμ μ λ°μ΅λλ€. μΈ κ° μ΄μμ νμ μ μ μ₯νκ³ μΆλ€λ©΄ μ΄λ»κ² ν΄μΌν κΉμ?
λ΅μ std::tupleμ μμ΅λλ€. std::tupleμ C++11 μ΄νμ λμ λ ν΄λμ€ ν νλ¦ΏμΌλ‘, μλ‘ λ€λ₯Έ νμ μ μμλ€μ λ¨μΌ κ°μ²΄λ‘ λ¬Άμ μ μμ΅λλ€. κ° μμμλ μμλλ‘ μΈλ±μ€(0λΆν° μμ)λ‘ μ κ·Όν μ μμ΅λλ€.
#include <tuple>
// μμ: intμ double νμ
μ κ°μ§λ ννμ μμ±ν©λλ€.
std::tuple<int, double> myTuple(42, 3.14, 'a');
// μμμ μ κ·Όνλ λ°©λ²:
int firstElement = std::get<0>(myTuple); // 42
double secondElement = std::get<1>(myTuple); // 3.14
char thirdElement = std::get<2>(myTuple); // a
std::make_tuple
std::make_tupleμ μΈμλ‘ μ λ¬λ κ°λ€μ μ¬μ©νμ¬ μλ‘μ΄ ννμ μμ±νλ ν¨μμ λλ€.
#include <tuple>
// μμ: make_tupleμ μ¬μ©νμ¬ ννμ μμ±ν©λλ€.
auto myTuple = std::make_tuple(42, 3.14, "hello");
// μμμ μ κ·Όνλ λ°©λ²μ λμΌν©λλ€.
int firstElement = std::get<0>(myTuple); // 42
double secondElement = std::get<1>(myTuple); // 3.14
const char* thirdElement = std::get<2>(myTuple); // "hello"
std::tie, std::ignore
std::tieμ ννμ μμλ€μ μ°Έμ‘°λ‘ λ°μΈλ©νλλ° μ¬μ©λ©λλ€. μ΄λ₯Ό ν΅ν΄ μ¬λ¬ κ°μ λμμ λ°ννκ±°λ, μ¬λ¬ κ°μ ν λ²μ ν λΉνλλ° μ μ©ν©λλ€. std::ignoreμ ννμ νΉμ μμλ₯Ό 무μνλλ° μ¬μ©λ©λλ€. C++17 μ΄νλΆν° νν ν΄μ²΄ μ μ¬μ©ν μ μμ΅λλ€.
#include <tuple>
int a;
double b;
char c;
// std::ignoreλ₯Ό μ¬μ©νμ¬ ννμ μΌλΆ μμλ₯Ό 무μν©λλ€.
std::tie(a, std::ignore, c) = std::make_tuple(42, 2.71828, 'Y');
// aλ 42, cλ 'Y'λ‘λ§ λ³κ²½λ¨.