c++

[C++ STL 시리즈] 6편: unordered_set과 unordered_map 사용법

개발에대해 2025. 9. 20. 20:21

 

C++ STL 시리즈 6편: unordered_set과 unordered_map 사용법

지난 글에서는 set과 map을 살펴보았습니다.

 

이번 글에서는 STL의 unordered_set과 unordered_map 컨테이너를 다루겠습니다.

이 컨테이너들은 해시(Hash) 기반 자료구조를 사용하여, set과 map보다 검색, 삽입, 삭제 속도가 빠릅니다.

특히 데이터 순서가 중요하지 않을 때 효율적입니다.

1. unordered_set이란?

unordered_set은 중복 없는 원소 집합 을 저장하며, 요소는 정렬되지 않고 해시 테이블에 저장됩니다.

따라서 삽입, 삭제, 검색 모두 평균적으로 O(1) 시간에 수행됩니다.

순서가 중요하지 않고 빠른 조회가 필요한 경우에 유용합니다.

 

unordered_set 선언과 초기화


#include <unordered_set>
#include <iostream>
using namespace std;

int main() {
    unordered_set<int> us = {5,1,3,3,2};

    for(int n : us)
        cout << n << " "; // 출력 순서는 정의되지 않음
}
  

unordered_set 주요 함수

  • insert(value) : 요소 추가
  • erase(value) : 특정 값 삭제
  • find(value) : 값 검색
  • size() : 요소 개수
  • empty() : 비어 있는지 확인

 

2. unordered_map이란?

unordered_map은 'key-value ' 를 저장하며, key는 중복될 수 없고 해시 테이블로 관리됩니다.

set/map과 달리 요소의 정렬은 보장되지 않지만, 평균 O(1) 시간에 검색, 삽입, 삭제가 가능합니다.

데이터 순서가 중요하지 않고 빠른 조회가 필요할 때 적합합니다.

 

unordered_map 선언과 초기화


#include <unordered_map>
#include <iostream>
using namespace std;

int main() {
    unordered_map<string,int> um;
    um["apple"] = 3;
    um["banana"] = 5;

    cout << "apple: " << um["apple"] << ", banana: " << um["banana"] << endl;
}
  

unordered_map 주요 함수

  • insert({key,value}) : 요소 추가
  • erase(key) : key에 해당하는 요소 삭제
  • find(key) : key 검색
  • size() : 요소 개수
  • empty() : 비어 있는지 확인

 

3. set/map vs unordered_set/unordered_map

set과 map은 정렬된 자료구조를 제공하며 이진 검색 트리를 사용합니다.

 

반면 unordered_set과 unordered_map은 해시 기반이므로 평균적으로 삽입, 삭제, 검색 속도가 빠릅니다.

하지만 순서는 유지되지 않습니다.

 

컨테이너 정렬 검색 속도 사용 용도
set/map O (자동 정렬) O(log n) 순서가 중요한 집합/키-값 저장
unordered_set/unordered_map X (순서 무시) O(1) 평균 빠른 검색과 삽입이 필요한 경우
 

4. 실전 활용 예제


#include <unordered_set>
#include <unordered_map>
#include <iostream>
using namespace std;

int main() {
    unordered_set<int> us = {1,2,3,3,4};
    for(int n : us)
        cout << n << " "; // 순서는 정의되지 않음

    cout << endl;

    unordered_map<string,int> um;
    um["apple"] = 3;
    um["banana"] = 5;
    um["apple"] += 2;

    for(auto &p : um)
        cout << p.first << ":" << p.second << " "; // 순서는 정의되지 않음
}
  

정리

이번 글에서는 STL의 unordered_set과 unordered_map을 살펴보았습니다.

두 컨테이너는 해시 기반으로 동작하며, 평균적으로 삽입, 삭제, 검색 속도가 매우 빠릅니다.

set/map과 달리 요소의 순서는 유지되지 않지만, 빠른 조회가 필요한 상황에서 유용합니다.

 

반응형