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과 달리 요소의 순서는 유지되지 않지만, 빠른 조회가 필요한 상황에서 유용합니다.
'c++' 카테고리의 다른 글
C++ 클래스 상속과 다형성 활용법 (0) | 2025.09.21 |
---|---|
C++ 연산자 오버로딩 사용법 (0) | 2025.09.21 |
[C++ STL 시리즈] 5편: set과 map 사용법 (0) | 2025.09.20 |
[C++ STL 시리즈] 4편: stack과 queue 사용법 (0) | 2025.09.20 |
[C++ STL 시리즈] 3편: deque 사용 (1) | 2025.09.20 |