Skip to content

Instantly share code, notes, and snippets.

@j2doll
Created March 28, 2025 01:53
Modern C++ 순회 방법(Iteration)과 구조 분해(Structured Bindings)

Modern C++ 순회 방법(Iteration)과 구조 분해(Structured Bindings)

  • Modern C++에서 std::unordered_map은 키-값 쌍을 저장하는 해시 기반의 연관 컨테이너로, 빠른 검색과 삽입, 삭제가 필요한 경우 유용하게 사용됩니다.
  • 이 글에서는 unordered_map을 순회하는 두 가지 방법과 함께, C++17에서 도입된 구조 분해(Structured Bindings) 의 개념도 함께 설명드립니다.


1. C++11 std::unordered_map

  • std::unordered_mapC++11에서 처음 표준에 도입 된 컨테이너(Container) 입니다.
  • 내부적으로 해시 테이블 을 사용하여 평균적으로 O(1)에 가까운 성능으로 데이터를 검색하거나 삽입할 수 있습니다.
  • 정렬된 순서가 보장되지 않으며, 키의 순서에 의존하지 않는 경우에 적합합니다.
  • C++11 이전에는 표준이 아니었던 hash_map(예: <ext/hash_map>) 등을 사용하는 대체 방안이 있습니다.


2. Modern C++ 순회 방법(Iteration)

2.1. 전통적인 방법 (std::pair 참조 사용) – C++11 이상

  • cpp

      for (const auto& kv : my_map) {
          std::cout << "key=" << kv.first << " value=" << kv.second << "\n";
      }
    

  • kvstd::pair<const Key, Value>const 참조입니다.
  • .first로 키, .second로 값을 참조합니다.

2.2. 구조 분해 (Structured Bindings) – C++17 이상

  • cpp

      for (const auto& [key, value] : my_map) {
        std::cout << "key=" << key << " value=" << value << "\n";
      }
    

  • C++17에서 도입된 구조 분해 문법 을 활용한 방법입니다.
  • 코드가 더 간결하고 가독성이 뛰어납니다.
  • std::pair의 멤버를 [key, value] 형식으로 직접 변수에 바인딩할 수 있습니다.


3. 구조 분해

  • 구조 분해 (Structured Bindings)C++17에서 새롭게 추가된 기능으로, 복합 자료형의 내부 값을 분해하여 별도 변수로 바인딩 할 수 있게 해줍니다.

3.1. 예제: std::pair 분해

  • cpp

      std::pair<std::string, int> p{"apple", 3};
      
      // 구조 분해 방식
      auto [key, value] = p;
    

  • key"apple", value3을 가집니다.
  • std::tuple, 구조체, 배열 등에도 사용할 수 있습니다.


4. 요약

  • 순회 방식 문법 예시 C++ 버전 가독성 특이사항
    전통적인 방식 kv.first, kv.second C++11+ 보통 모든 C++11 코드에서 사용 가능
    구조 분해 방식 [key, value] C++17+ 좋음 더 간결하고 직관적임
  • 순회 시에는 C++11 스타일(.first, .second)과 C++17 스타일(구조 분해) 모두 가능하므로, 자신의 프로젝트 환경에 맞는 문법을 선택 하여 사용하면 됩니다.

  • C++17 이상을 사용 중이라면 구조 분해를 적극 활용하는 것이 코드 가독성 측면에서 큰 도움이 됩니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment