C++

STL Container 선택

F.xavier 2014. 2. 17. 07:58

표준 STL은 기본적으로 Homogeneous Collection만을 지원한다. 즉 같은 타입의 Object만을 저장할 수 있다.

일단 크기를 예상할 수 있다면 array 가 가장 좋다. 객체를 Access time이나 객체의 추가 삭제가 쉽고 가장 빠르다.

그러나 array를 사용하기 어려운 경우에 적당한 STL container를 찾아보자.

Containment Class

Container Type

 

Insert/Delete

Access

Vector

Sequencial

Dynamic Array

데이타 억세스가 많고

데이타의 추가가 뒤에서 일어날때

O(1)

임의지점 O(N-p)

O(1)

List

Sequencial

Binary Linked List

데이타의 추가 삭제가 빈번하고

접근하는 일이 적을 때

O(1)

O(N) or O(N/2)

Queue

Sequencial

First In First Out

의 객체 입출력이 있을 때만 사용

 

O(1)    N/A

Deque

Container Adapter

양방향 Queue (비추)

Vector와 비슷한 구조

임의의 객체 접근이 느리다.

 

O(1)    O(1)

Stack

Container Adapter

Last In First Out

의 객체 입출력이 있을 때만 사용

 

O(1)    N/A

Set/Multiset

Sorted Associative Container Adapter

정렬된 자료구조

중복을 허용할 때는 Multiset 사용.

 

Vector<set<List    List <set< Vector

Map/Multimap

Sorted Associated Container Adapter

Key값에 의해 정렬된 자료구조를 갖는다.

중복을 허용할 때는 Multimap 사용.

 

Vector<set<List    List <set< Vector

 

이외에 bitset도 일반적인 Container는 아니지만 Container로 동작을 한다. 다만
insert/delete 같은 메소드가 정의되지 않고 iterator 도 지원되지 않는다.
vector나 array에 가깝다.

String도 기술적으로 보면 character의 vector 라고 볼 수 있다. 따라서 vector의 알고리즘들이 부분적으로 적용가능하다.

JAVA에서 보면 hash set hash map 이런 것들이 지원되는 데 C++의 표준에서는 지원되지 않고 C++11에서 지원이 된다.