C++현대 C++

structured bindings와 pair

pair, tuple, map 원소를 더 읽기 쉽게 분해하는 structured bindings 문법을 정리합니다.

마지막 수정 2026년 3월 19일

기본 패턴

cpp
std::pair<std::string, int> entry{"apple", 3};
auto [name, count] = entry;

설명

  • structured bindings는 여러 값을 묶어 둔 객체에서 각 구성 요소를 한 번에 이름 붙여 꺼내는 문법입니다.
  • pair.first, pair.second보다 의미 있는 변수 이름을 줄 수 있어 코드 가독성이 크게 좋아집니다.
  • std::pair, std::tuple, 배열, 구조체 일부, map 반복 결과처럼 분해 가능한 대상과 잘 어울립니다.
  • 선언이 auto [a, b]인지 auto& [a, b]인지에 따라 복사인지 참조인지 달라지므로, 값 의미를 함께 생각해야 합니다.
  • 특히 연관 컨테이너 순회에서 for (const auto& [key, value] : table) 패턴은 현대 C++에서 가장 자주 보이는 문법 중 하나입니다.

짧은 예제

cpp
#include <iostream>
#include <map>
#include <string>

int main() {
    std::map<std::string, int> scores{{"Kim", 90}, {"Lee", 85}};

    for (const auto& [name, score] : scores) {
        std::cout << name << ": " << score << "\n";
    }
}

빠른 정리

항목설명
auto [a, b] = x;값을 분해해 새 변수 이름을 붙임
auto& [a, b] = x;원본에 대한 참조를 유지
std::pair두 값을 묶는 가장 단순한 표준 타입
map 순회key/value 분해에 특히 잘 어울림
장점.first, .second보다 의미가 잘 드러남

주의할 점

structured bindings는 읽기 좋지만, auto인지 auto&인지에 따라 복사와 참조가 달라집니다. 수정이 원본에 반영되어야 하는 경우 이 차이가 특히 중요합니다.