[C/C++ STL] STL 컨테이너들의 적절한 사용법 정리
리스트(list)
- 저장할 데이터 개수가 가변적일때 사용함.
- 중간에 데이터 삽입이나 삭제가 자주 일어날때 사용함.(리스트의 추가 삭제 용이성)
- 저장할 데이터 개수가 많으면서 검색을 자주하면 다른 컨테이너를 쓰는 것이 좋음.(map ,set, unordered_map 사용이 좋음)
- 데이터에 랜덤접근하는 경우가 적을떄 사용함.
(리스트는 순차 접근만 가능하기 때문에 저장된 위치를 알더라도 순차접근함. 메모리 낭비)
벡터(vector)
- 저장할 개수가 가변적일때 사용함.(데이터 추가 용이)
- 중간에 데이터 삽입이나 삭제가 일어나지 않을때(배열과 같기 때문에 중간 삽입,삭제는 리소스 낭비)
- 저장할 데이터 개수가 적거나 많은 경우에는 빈번하게 검색하는 것은 지양.(데이터 순차 저장이므로 검색속도가 느림. 검색에는 map, set, hash_map을 사용하는것이 좋음)
- 데이터 랜덤접근이 용이함
(배열같은 특성이 있어 랜덤 접근이 가능함, 위치를 알고있다면 검색도 필요 없고 빠르게 접근 가능)
해시맵(unordered_map)
- 많은 자료(수천단위)를 저장하고, 검색 속도가 빨라야 할때 사용함.(자료가 많을때 검색이 빠르다)
- 너무 빈번하게 자료를 삽입, 삭제를 할경우에 사용은 지양.(추가나 삭제는 list, vector, deque이 더 빠름)
- 중복키 사용 불가
맵(map)
- 많은 자료들을 정렬해야 할때 사용함
- 많은 자료를 저장하고, 검색이 빨라야 할때 사용함
- 해쉬맵과 다른점은 맵은 자동으로 정렬을 하기 때문에 정렬이 필요하지 않는 곳에서 맵을 사용하는것은 지양.
- 중복키 사용 불가.
셋(set)
- 맵과는 다르게 '키(Key)'만 저장함
- 정렬해야 할 때 사용함
- key가 있는지 없는지 알아야 할 때 사용함.
- 많은 자료를 저장하고, 검색 속도가 빨라야 할 때 사용함.
- 중복키 사용 불가
덱(deque)
- 데이터를 앞이나 뒤에서 삽입, 삭제를 한다면 STL 컨테이너 라이브러리 중에서 가장 성능이 좋음.
- 저장할 데이터 개수가 가변적일때 사용함.
- 검색을 거의 하지 않는다.(검색은 map, set, hasp_map을 사용하는것이 좋음)
- 데이터 랜점접근이 가능하다.(백터와 같은 이유)