C++ STL 시리즈 5편: set과 map 사용법
지난 글에서는 STL의 stack과 queue를 살펴보았습니다.
이번 글에서는 C++ STL에서 제공하는 **set과 map** 컨테이너를 다루겠습니다.
두 컨테이너는 모두 데이터를 **자동 정렬**하며, 중복을 관리할 수 있어 효율적인 데이터 검색과 저장이 가능합니다.
1. set이란?
set은 **중복 없는 원소의 집합**을 표현하는 컨테이너입니다.
요소는 항상 정렬되어 저장되며, 삽입, 삭제, 검색이 효율적입니다.
set은 내부적으로 **이진 검색 트리(Binary Search Tree)**를 사용하기 때문에 O(log n) 시간에 연산이 가능합니다.
set 선언과 초기화
#include <set>
#include <iostream>
using namespace std;
int main() {
set s; // 빈 set 선언
set s2 = {3,1,4,1,5};
for(int n : s2)
cout << n << " "; // 출력: 1 3 4 5 (중복 제거, 자동 정렬)
}
set 주요 함수
insert(value)
: 요소 추가erase(value)
: 특정 값 삭제find(value)
: 값 검색size()
: 요소 개수empty()
: 비어 있는지 확인
2. map이란?
map은 'key-value' 를 저장하는 컨테이너입니다.
각 key는 중복될 수 없으며, value와 연결됩니다.
map도 내부적으로 이진 검색 트리를 사용하기 때문에 O(log n) 시간에 검색, 삽입, 삭제가 가능합니다.
map 선언과 초기화
#include <map>
#include <iostream>
using namespace std;
int main() {
map<string, int> m;
m["apple"] = 3;
m["banana"] = 5;
cout << "apple: " << m["apple"] << ", banana: " << m["banana"] << endl;
}
map 주요 함수
insert({key,value})
: 요소 추가erase(key)
: key에 해당하는 요소 삭제find(key)
: key 검색size()
: 요소 개수empty()
: 비어 있는지 확인
3. vector/list/deque vs set/map
vector, list, deque는 순서 중심의 컨테이너이며, 중복 허용 및 삽입/삭제 방식이 다릅니다.
set과 map은 '자동 정렬과 중복 제거' 기능이 핵심이며, key 기반 검색이 빠릅니다.
따라서 데이터를 정렬된 상태로 유지하거나 특정 키로 빠르게 검색해야 할 때 적합합니다.
컨테이너 | 중복 허용 | 정렬 여부 | 접근 방식 | 사용 예 |
---|---|---|---|---|
vector/list/deque | 허용 | X | 인덱스 또는 반복자 | 순차적 처리, 삽입/삭제 |
set | 불가 | O | 값 검색 | 중복 제거, 정렬 집합 |
map | key 불가 | O | key 검색 | key-value 저장, 빠른 검색 |
4. 실전 활용 예제
#include <set>
#include <map>
#include <iostream>
using namespace std;
int main() {
set<int> s = {5,1,3,3,2};
for(int n : s)
cout << n << " "; // 1 2 3 5
cout << endl;
map<string,int> m;
m["apple"] = 3;
m["banana"] = 5;
m["apple"] += 2;
for(auto &p : m)
cout << p.first << ":" << p.second << " "; // apple:5 banana:5
}
정리
이번 글에서는 C++ STL의 set과 map 컨테이너 사용법을 정리했습니다.
set은 중복 제거와 정렬이 필요한 경우, map은 key-value 기반 저장과 빠른 검색이 필요한 경우에 적합합니다.
vector, list, deque와 달리, set과 map은 내부적으로 이진 검색 트리를 사용하므로 검색 속도가 뛰어납니다.
다음 글에서는 STL의 unordered_set과 unordered_map을 다루며, 해시 기반 자료구조의 장점과 활용법을 소개할 예정입니다.
'c++' 카테고리의 다른 글
C++ 연산자 오버로딩 사용법 (0) | 2025.09.21 |
---|---|
[C++ STL 시리즈] 6편: unordered_set과 unordered_map 사용법 (0) | 2025.09.20 |
[C++ STL 시리즈] 4편: stack과 queue 사용법 (0) | 2025.09.20 |
[C++ STL 시리즈] 3편: deque 사용 (1) | 2025.09.20 |
[C++ STL 시리즈] 2편: list 사용법 (0) | 2025.09.19 |