Containers

컨테이너 선택 기준

vector, list, map, unordered_map은 이름보다 비용 모델이 중요하다. 삽입과 조회 횟수, 반복자 안정성, 원소 소유 방식을 함께 고른다.

01

접근 패턴을 센다

랜덤 접근, 순차 순회, 중간 삽입, 키 검색 중 실제 빈도가 높은 동작을 먼저 잡는다.

02

원소 수명 검토

컨테이너 변경 뒤 iterator, pointer, reference가 계속 유효해야 하는지 확인한다.

03

키 의미 결정

정렬된 순서가 필요한지, 평균 O(1) 검색이 필요한지에 따라 map과 unordered_map을 나눈다.

vector
기본 후보 연속 메모리라 캐시 친화적이고 순회가 빠르다.
재할당 시 참조와 iterator가 무효화될 수 있다.
deque
양끝 삽입 앞뒤 push/pop이 잦고 완전한 연속 저장이 필요 없을 때 쓴다.
포인터 안정성 규칙을 확인한다.
map/set
정렬된 키 키 순서 순회와 lower_bound가 필요하면 트리 기반 컨테이너가 맞다.
비교 함수가 엄격 약순서여야 한다.
unordered
해시 검색 해시 품질과 bucket 재배치가 성능과 iterator 안정성에 영향을 준다.
reserve로 rehash를 줄일 수 있다.

기본값 · 참조 보관 · 키 규칙 점검

기본값 특별한 이유가 없다면 vector에서 시작해 측정으로 바꾸는가.
참조 보관 컨테이너 원소 주소를 밖에 저장한다면 재할당과 erase 규칙을 알고 있는가.
키 규칙 map의 비교자와 unordered_map의 hash/equal이 같은 동등성 의미를 쓰는가.

용량 예약

std::vector<Event> events;
events.reserve(expectedCount);
for (auto&& raw : input) {
    events.push_back(parse_event(raw));
}