c++

[C++ STL 시리즈] 5편: set과 map 사용법

개발에대해 2025. 9. 20. 18:34

 

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을 다루며, 해시 기반 자료구조의 장점과 활용법을 소개할 예정입니다.

반응형