C++ STL 컨테이너

컨테이너는 저장 방식과 무효화 규칙으로 선택한다

STL 컨테이너 선택은 vector, list, map 이름 맞히기가 아니다. 메모리 배치, 조회·삽입 빈도, 순서 보장, iterator/reference 무효화 규칙이 선택 기준이다.

01

연산 빈도

끝 삽입, 중간 삭제, 키 조회, 정렬 순회 중 어떤 일이 반복되는지 본다.

핫 path 기준
02

저장 방식

연속 메모리인지 노드 기반인지가 캐시 효율과 참조 안정성을 바꾼다.

성능 특성
03

정렬 여부

정렬된 순회가 필요하면 map/set, 평균 빠른 조회가 중요하면 unordered 계열을 본다.

출력 순서 점검
04

변경 후 안전

insert/erase/push_back 뒤 기존 iterator와 reference가 유효한지 확인한다.

버그 주요 원인
vector
연속 메모리와 빠른 임의 접근 재할당 시 iterator, pointer, reference가 모두 무효화될 수 있다.
reserve 고려
deque
양끝 삽입에 강함 연속 배열 하나는 아니므로 raw pointer 연산 가정은 위험하다.
블록 구조
list
노드 기반 중간 삽입/삭제 임의 접근이 없고 캐시 효율이 낮아 순회 성능은 약할 수 있다.
list::sort
map
정렬된 키 조회 삽입·조회는 로그 비용이고 키 순서 순회가 필요할 때 유리하다.
키 변경 불가

무효화 · 순서 · 메모리 점검

무효화 erase 후 반환 iterator로 루프를 이어가는지 확인한다.
순서 unordered_map은 출력 순서를 보장하지 않으므로 테스트 기대값을 조심한다.
메모리 작은 객체 대량 저장이면 노드 오버헤드와 cache miss를 함께 본다.