본문 바로가기

Algorithm & DataStructure/DataStructure

STL 컨테이너

컨테이너

 

컨테이너란 클래스 템플릿을 의미합니다. (데이터를 저장하는 객체) - 클래스와 객체는 의미가 다르지만 간단하게 이렇게 표현하겠습니다.

 

컨테이너를 선언 할 때 컨테이너의 포함될 요소의 형식을 지정해줘야 합니다 (Template)

 

컨테이너에는 삽입 삭제와 다른 작업을 위한 맴버함수 들이 존재합니다.

 

컨테이너는 레퍼런스 보다는 값을 제공합니다. 이것은 데이터 삽입시 삽입 될 데이터의 복사가 일어나고, STL내부에서 동적할당 하여 복사해주는 것을 의미합니다.

 

자료구조라도 할 수 있겠죠.

 

컨테이너는 특징에 따라 크게 시퀀스 컨테이너, 연관 컨테이너, 어댑터 컨테이너로 분류할 수 있습니다.

 

 

시퀀스 컨테이너란 지정된 요소가 삽입된 순서를 유지하는 컨테이너 입니다.

 

vector, list, deque 등이 포함됩니다.

 

요소가 삽입된 순서를 유지하기 때문에 탐색이 불리합니다. O(n)의 알고리즘의 효율을 가지게 되죠. (Worst Case)

 

하지만 요소를 삽입된 순서대로 순회할 경우 이점을 가질 수 있습니다. (Game에서 Layer를 순회하며 Update를 돌려줄 때.. 등등)

 

원소 값들을 직접 수정할 수 있다는 장점이 있습니다. (데이터에 접근하여 값 수정 가능)

 

 

연관 컨테이너란 지정된 요소가 일정 규칙에 따라 저장되는 것 입니다. (정렬되어 저장)

 

map,set등이 포함됩니다.

일반적으로 이진 탐색을 하기 때문에 탐색에 유리합니다. O(logn)의 알고리즘의 효율을 가지게 되죠.

 

하지만 원소값을 수정하기가 힘들 다는 것이 단점입니다.

 

밸런스 트리로 이루어져 있기 때문에 균형을 맞추기위해 바로 Key를 변경할 수 없습니다. 

 

Key 값을 수정하려면 Key값으로 데이터를 찾아 변수에 할당한 후 erase로 컨테이너안의 데이터를 삭제해주고,

 

변경된 Key값으로 다시 insert 해줘야 하는 번거로움이 있습니다. (비효율적일 수 있음)

 

 

어댑터 컨테이너란 시퀀스 컨테이너를 변형시켜 스택, 큐, 우선순위 큐 형태로 저장 한것을 말합니다.

 

 

컨테이너 안에서도 메모리 상에 자료를 구성하는 것에 따라 분류 될 수 있고, 또 여러 기준들에 의해 분류 될 수 있습니다.

 

 

제가 이해한 것을 글로 적어 보았는데요. 미흡한 점이나 잘못된 점을 댓글로 남겨주시면 공부해서 수정하도록 하겠습니다.

 

부족하지만 감사합니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'Algorithm & DataStructure > DataStructure' 카테고리의 다른 글

STL Queue, Stack  (0) 2018.04.29
list 구현  (0) 2018.04.29
STL list  (0) 2018.04.29
vector 구현  (0) 2018.04.29
STL vector  (0) 2018.04.25