연속 메모리와 인덱스 접근
임의 접근 O(1), 끝 삽입 amortized O(1), 중간 삽입 O(n)이면 먼저 이쪽을 본다.
std::vector가 기본값인 이유는 단순해서가 아니라 연속
메모리와 순회 지역성이 강하기 때문이다. 요구가 달라지면 양끝 조작,
정렬된 키, 해시 조회, 제한된 인터페이스를 따로 판단한다.
access -> update -> search -> order -> invalidation
임의 접근 O(1), 끝 삽입 amortized O(1), 중간 삽입 O(n)이면 먼저 이쪽을 본다.
양끝 push/pop은 강하지만 전체가 하나의 연속 배열은 아니다. 포인터 안정성도 vector와 다르다.
iterator가 이미 있으면 삽입/삭제가 강하다. 찾기부터 해야 하면 탐색 O(n)이 먼저 온다.
키 순서 순회, lower_bound, 범위 삭제가 API 일부라면
트리 기반 컨테이너가 맞다.
평균 O(1)을 기대하지만 해시 품질, load factor, rehash, 최악 O(n)을 같이 확인한다.
전체 컨테이너를 공개하지 않는다. priority_queue는
FIFO/LIFO가 아니라 heap adaptor다.
vector
연속 메모리 · O(1) 접근
끝 삽입 amortized O(1)
정렬 후 binary search
재할당 시 참조 무효화
deque
random access · 비연속 블록
앞/뒤 삽입·삭제 O(1)
기본 검색 O(n)
블록 구조와 무효화 규칙 확인
list / forward_list
임의 접근 없음
iterator 위치 삽입·삭제 강함
찾기부터 하면 O(n)
노드 할당과 캐시 miss 비용
map / set
키 순서가 구조의 일부
삽입·삭제 O(log n)
검색 O(log n)
비교자 일관성 유지
unordered_map / unordered_set
순서 보장 없음
평균 삽입·삭제 O(1)
평균 검색 O(1), 최악 O(n)
bucket 메모리와 해시 품질
stack / queue / priority_queue
내부 컨테이너를 감싼다
규칙에 맞는 입출력만 허용
priority_queue는 heap
기반 컨테이너 제약 확인