그린티라떼
개발공간
그린티라떼
전체 방문자
오늘
어제
  • 분류 전체보기 (26)
    • unity (6)
      • 개발 (4)
      • iTween (0)
      • error (2)
    • 게임서버 (5)
    • C++ (7)
      • 문법 (5)
      • 알고리즘 (2)
    • C# (5)
    • CS지식 (1)
    • 기타 (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • object
  • regex
  • cout 스트림 버퍼
  • 메모리영역
  • interface
  • 컨테이너
  • unity
  • var
  • C++
  • 다중상속의 문제점
  • 함수 호출 오버헤드
  • Container
  • inline 함수
  • 제네릭
  • 데이터타입
  • 정규 표현식
  • 함수호출
  • Gradle build failed
  • 유니티
  • 형식매개변수의 제약
  • Dynamic
  • 일반화컬렉션
  • delegate chain
  • Delegate
  • 일반화
  • cs지식
  • c#
  • 유니티 빌드 에러
  • property
  • Functions

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
그린티라떼

개발공간

C++/문법

C++) Container비교

2021. 8. 25. 19:20

특징은 무엇이고 문제를 풀고자 할 때 어떤 컨테이너를 선택해야 할까?

 

순차 컨테이너

  • vector
    • 임의 접근 가능, 순차 접근 가능
    • 뒤에서 삽입, 삭제가 빠름
    • 크기 변경 가능
    • 각 요소를 메모리 상 연속적으로 저장
    • 메모리 동적으로 할당 (내부 capacity가 고갈될 시 전체 메모리 크기만큼 재할당 발생)
  • deque 
    • 임의 접근 가능 
    • 앞과 뒤에서 삽입과 삭제 빠름
    • 크기 변경 가능
    • Vector와 다르게 각 요소들이 메모리 상에 연속적으로 저장되지 않고, 각 node는 개별적인 메모리를 할당
    • 내부 capacity가 고갈될 시 일정 크기를 가지는 chunk 단위로 확장됨( 저장 원소가 많고 메모리 할당량이 큰 경우 Vector에 비해 확장 비용이 절감되지만, 컨테이너 처음부터 끝까지 연속 메모리 공간이 아니므로, Vector에서 가능했던 원소들 간 포인터 연산 불가능)
  • list 
    • 특정 위치에 접근이 불가능하지만, 위치에 상관없이 삽입, 삭제가 빠름 (상수 복잡도)
    • 특정 원소에 접근하려면  Forward/Reverse 순회만 가능 (선형 복잡도)
    • 원소들간 상호 연결 정보를 위해 추가적인 메모리가 사용됨 (doubly-linked list로 구현 됨)
Sequence Container 시간 복잡도
Random Access 찾기 node 삽입/ 삭제
Vector O(1) O(n) O(n)
(맨 뒤 : O(1))
Deque O(1) O(n) O(n)
(맨 앞/뒤 : O(1))
List 지원 X O(n) O(1)

연관 컨테이너

  • set
    • red_black tree 구조
    • 값들에 순서가 유지 되어야 한다면
    • key의 집합
    • 원소들을 순서대로 관리하며 소속검사, 삽입 ,삭제 빠름
    • 삽입시 자동 정렬 (default : 오름차순정렬)
  • multiset
    • 중복을 허용하는 set
  • map
    • red_black tree 구조
    • 키 - 값 
    • 삽입시 자동 정렬 (default : 오름차순정렬)
    • value값 정렬하고 싶을 시, vector<Pair<,>> 복사 후 정렬 알고리즘 사용
  • multimap
    • 중복을 허용하는 map 

정렬되지않은 map,set : unordered_map / unordered_multimap / unordered_set / unordered_multiset

Associative Container 시간 복잡도
Random Access 찾기 node 삽입/ 삭제
set 지원 X O(log n) O(log n)
map 지원 X O(log n) O(log n)

 

컨테이너 어댑터 (반복자를 지원하지 않아 STL 알고리즘을 이용할 수 없습니다.)

  • statck 
    • top에서만 삽입, 삭제 가능
  • queue
    • 삽입은 뒤쪽에서, 삭제는 앞쪽에서
  • priority_queue 
    • 가장 큰 값(or 가장 작은 값)을 찾아 제거하는 연산이 빈번하면
    • 가장 큰 값(or 가장 작은 값)의 접근과 삭제가 빠름
Container Adaptors 시간 복잡도
Random Access 찾기 node 삽입/ 삭제
stack     amortized O(1)
queue     amortized O(1)
priority_queue     O(log n)

 

'C++ > 문법' 카테고리의 다른 글

(C++) 함수의 인자 또는 리턴 값에 STL 데이터 타입에 관하여  (2) 2022.11.12
c++ regex 정규 표현식  (0) 2021.12.22
if문 속 비교연산에서 순서의 비밀  (0) 2021.08.30
C++) cout 스트림 버퍼/ 함수 호출 오버헤드/ Inline함수  (0) 2021.05.08
    'C++/문법' 카테고리의 다른 글
    • (C++) 함수의 인자 또는 리턴 값에 STL 데이터 타입에 관하여
    • c++ regex 정규 표현식
    • if문 속 비교연산에서 순서의 비밀
    • C++) cout 스트림 버퍼/ 함수 호출 오버헤드/ Inline함수
    그린티라떼
    그린티라떼

    티스토리툴바