[STL] std::tuple, std::make_tuple, std::tie, std::ignore

2023. 8. 4. 00:26Β·ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄/C++ μ‘μš©

 

 

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'둜만 변경됨.

 

μ €μž‘μžν‘œμ‹œ (μƒˆμ°½μ—΄λ¦Ό)

'ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄ > C++ μ‘μš©' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

클래슀의 크기와 λ©”λͺ¨λ¦¬ ꡬ쑰  (1) 2023.09.14
[STL] μŠ€λ§ˆνŠΈν¬μΈν„°(std::unique_ptr, std::shared_ptr, std::weak_ptr)  (3) 2023.08.05
[STL][functional] std::bind, std::function  (1) 2023.06.08
[STL] utility : minmax, move, forward, swap  (1) 2023.06.04
vcpkgλ₯Ό μ“°μž  (0) 2023.03.19
'ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄/C++ μ‘μš©' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • 클래슀의 크기와 λ©”λͺ¨λ¦¬ ꡬ쑰
  • [STL] μŠ€λ§ˆνŠΈν¬μΈν„°(std::unique_ptr, std::shared_ptr, std::weak_ptr)
  • [STL][functional] std::bind, std::function
  • [STL] utility : minmax, move, forward, swap
μ„œμ•„λž‘πŸ˜ƒ
μ„œμ•„λž‘πŸ˜ƒ
Just Do ItπŸ’ͺ
  • μ„œμ•„λž‘πŸ˜ƒ
    G-Stack
    μ„œμ•„λž‘πŸ˜ƒ
  • 전체
    였늘
    μ–΄μ œ
    • 전체보기 (144)
      • ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄ (78)
        • C++ 기초 (28)
        • C++ μ‘μš© (18)
        • Python (18)
        • JavaScript & NodeJS (0)
        • Go (12)
        • React & NextJS (2)
        • Java (0)
      • AI (2)
      • 컴퓨터 ꡬ쑰 & 운영체제 (31)
      • μ•Œκ³ λ¦¬μ¦˜ (12)
      • λ°μ΄ν„°λ² μ΄μŠ€ (5)
      • λ„€νŠΈμ›Œν¬ (3)
      • λ””μžμΈνŒ¨ν„΄ (5)
      • μ„œλΉ„μŠ€ & 툴 (7)
      • νŠΈλ Œλ“œ&이슈 (1)
  • λΈ”λ‘œκ·Έ 메뉴

    • ν™ˆ
    • νƒœκ·Έ
    • λ°©λͺ…둝
  • 링크

  • 곡지사항

    • GμŠ€νƒμ˜ 기술 λΈ”λ‘œκ·Έ
  • 인기 κΈ€

  • νƒœκ·Έ

    λ°°μ—΄
    반볡문
    컴퓨터
    ν•˜λ“œλ””μŠ€ν¬
    λ³€μˆ˜
    cpu
    λ°μ΄ν„°λ² μ΄μŠ€
    νŒ¨ν‚€μ§€
    μŠ€νƒ
    RAM
    포인터
    가상메λͺ¨λ¦¬
    c
    component
    init
    λ””μžμΈνŒ¨ν„΄
    Thread
    λ©”λͺ¨λ¦¬
    STD
    파이썬
    상속
    fork
    pointer
    μ•Œκ³ λ¦¬μ¦˜
    c++
    νŒŒμΌμž…μΆœλ ₯
    ν•¨μˆ˜
    μž¬κ·€
    쑰건문
    go
  • 졜근 λŒ“κΈ€

  • 졜근 κΈ€

  • hELLOΒ· Designed Byμ •μƒμš°.v4.10.6
μ„œμ•„λž‘πŸ˜ƒ
[STL] std::tuple, std::make_tuple, std::tie, std::ignore
μƒλ‹¨μœΌλ‘œ

ν‹°μŠ€ν† λ¦¬νˆ΄λ°”