각 컨테이너의 주요 특징 요약
-------------------------------
시퀀스 컨테이너: 요소들이 순서대로 저장되며, 삽입/삭제 위치에 따라 성능이 달라집니다.
연관 컨테이너: key-value 쌍으로 저장되며, key를 기반으로 빠르게 검색할 수 있습니다. 정렬 여부와 중복 허용 여부에 따라 종류가 나뉩니다.
컨테이너 어댑터: 다른 컨테이너를 기반으로 특정 자료 구조를 제공합니다.
시퀀스 컨테이너
대표 컨테이너 : vector, list, deque, array 요소들이 순서대로 저장
vector vector 연속 메모리, 랜덤 접근 빠름, 중간 삽입/삭제 느림 일반적인 용도, 동적 배열
list list 연결 리스트, 중간 삽입/삭제 빠름, 랜덤 접근 느림 빈번한 삽입/삭제, 알고리즘 구현
deque deque 양쪽 끝에서의 삽입/삭제 빠름 큐, 스택 구현, 덱
array array 고정 크기, 컴파일 시 크기 결정 크기가 변하지 않는 배열
연관 컨테이너
대표 컨테이너 : map, unordered_map, multimap, multiset, set key-value 쌍 또는 key 기반 저장, 정렬
map map key 기반 정렬, 중복 key 허용 X 단어-빈도수, 학생 이름-학번
unordered_map unordered_map 해시 테이블 기반, 빠른 검색, 정렬 X 빠른 검색 필요, 정렬 불필요
multimap multimap key 기반 정렬, 중복 key 허용 한 학생-여러 과목
multiset multiset key 기반 정렬, 중복 key 허용, key만 저장 중복 허용하는 집합
set set key 기반 정렬, 중복 key 허용 X, key만 저장 중복 불허하는 집합
컨테이너 어댑터
대표 컨테이너 : stack, queue, priority_queue 특정 자료 구조 제공
stack stack LIFO (Last In First Out) 스택 구현
queue queue FIFO (First In First Out) 큐 구현
priority_queue priority_queue 우선순위 기반 우선순위 큐
선택 가이드
빠른 랜덤 접근이 필요하고, 크기가 자주 변하지 않는 경우: vector
중간에 삽입/삭제가 빈번한 경우: list
양쪽 끝에서의 삽입/삭제가 빈번한 경우: deque
고정된 크기의 배열이 필요한 경우: array
key-value 쌍으로 데이터를 저장하고, 빠른 검색이 필요한 경우: map 또는 unordered_map
중복된 key를 허용해야 하는 경우: multimap 또는 multiset
LIFO 방식이 필요한 경우: stack
FIFO 방식이 필요한 경우: queue
우선순위에 따라 데이터를 관리해야 하는 경우: priority_queue
예시:
주소록: 학생 이름(key)과 학번(value)을 저장하기 위해 map을 사용
쇼핑몰 장바구니: 상품 ID(key)와 수량(value)을 저장하기 위해 unordered_map을 사용
게임 캐릭터의 인벤토리: 아이템 이름(key)과 개수(value)를 저장하기 위해 multimap을 사용
카테고리 없음