포스트

STL - 컨테이너 (Container)

STL 컨테이너란?

STL 컨테이너는 프로그래밍 언어에서 데이터를 저장하고 관리하는 다양한 방법을 말하는 자료 구조입니다.

동일한 타입여러 종류의 객체를 저장하는 일종의 집합이라고 볼 수 있습니다.

다양한 종류의 컨테이너가 있으며, 각각 고유한 방식으로 데이터를 저장하고 관리합니다.


주요 컨테이너 유형

1. 시퀀스 컨테이너 (Sequence Containers)

sequence 란, 중세 라틴어 sequentia “뒤를 따르는 것, 연속” 에서 유래된 것으로 동사형의 뜻으로는 “순서대로 배열하다” 라는 뜻이 있습니다.

즉, 시퀀스 컨테이너는 데이터를 순서대로 저장하는 형태의 자료구조입니다.

  • array: 고정 크기의 일반적인 배열로, 데이터를 한 줄로 나열합니다.
  • vector: 크기가 동적으로 조정되는 배열로, 끝에서 쉽게 데이터를 추가하거나 제거할 수 있습니다.
  • list: 각 데이터가 이전/다음 데이터를 가리키는 체인과 같은 구조입니다. 물리적으로는 데이터가 순서대로 나열 될 필요가 없어 중간 요소를 제거하거나 추가하기 매우 쉽고, 양쪽 끝에서의 추가와 제거 또한 빠릅니다. 다만, 중간 요소에 접근하기 위해서는 순차적이 탐색이 필요하므로 느린 편입니다.
  • deque: 양쪽 끝에서 데이터를 추가하거나 제거할 수 있는 형태의 배열 체인입니다. 양쪽 끝에서의 접근이 빠르지만 중간 요소에 대한 접근은 vector보다 느린편입니다.

2. 연관 컨테이너 (Associative Containers)

연관 컨테이너는 데이터를 특정 규칙에 따라 “연관”시켜 저장하고 관리하는 형태의 자료구조 입니다.

말이 어렵지만, 예를 들면, 키-값 쌍으로 연관 시켜 관리하거나 특정 기준(숫자 값, 알파벳 순서 등)에 따라 정렬시켜 저장하는 형태의 자료구조들을 말합니다.

  • set / map: 유니크한 데이터(중복 없음)를 저장하며, 자동으로 정렬됩니다.
  • multiset / multimap: 중복된 데이터를 허용하며, 역시 자동으로 정렬됩니다.

3. 어댑터 컨테이너 (Container Adapters)

어뎁터 컨테이너는 기존의 컨테이너들을 특정한 인터페이스나 동작 방식으로 제한하거나 변형시켜 새로운 형태로 만들어진 컨테이너입니다.

“어댑터”라는 용어는 “전기 어댑터”를 생각하면 되는데, 기존의 것을 새로운 환경이나 요구 사항에 맞게 변형 시키는 도구나 메커니즘을 의미합니다. (전기 어댑터가 다른 나라의 전기 플러그에 맞게 전기 소켓을 변형시키는 것과 유사하게 생각하면 될 것 같습니다.)

즉, 어댑터 컨테이너란, 기존의 컨테이너를 변형시키거나 제한하여, 특정한 요구사항에 맞게 조정한 컨테이너를 말합니다.

  • stack: 마지막에 들어온 데이터가 먼저 나가는 구조입니다 (LIFO).
  • queue: 먼저 들어온 데이터가 먼저 나가는 구조입니다 (FIFO).
  • priority_queue: 데이터마다 중요도가 있으며, 가장 중요한 데이터가 먼저 나갑니다.

마무리

각 컨테이너들은 특정 사용 사례에 따라 성능이 달라질 수 있는 자료구조들 입니다.

예를 들어, 중간 요소에 대한 접근이 자주 일어난다면 array나 vector가 list보다 좋은 선택일 수 있습니다.

따라서, 요구사항과 목적에 맞춰 적절한 컨테이너를 선택하는 것이 중요합니다.


참고

STL - Standard Template Library 란?

STL - 반복자 (Iterator) (with.C++)

STL - 알고리즘 (Algorithm)

이 기사는 저작권자의 CC BY-NC-ND 4.0 라이센스를 따릅니다.