프로그래밍 문법/c++

c++ 자료구조

씩씩한 IT블로그 2024. 7. 14. 16:52
반응형

array

- 고정된 크기를 가진 자료구조

- 시간복잡도

  탐색 : O(1)

  삽입/삭제 : O(n)

array<int, 3> arr = {1,2,3,4,5};

 

set - 정의 및 시간복잡도

1. set

set<int> my_set = {1,2,3,4,5};

- 중복을 허용하지 않는 자료구조

- red-black tree구조로 되어있어 정렬이 되어있다.

- 시간복잡도

  탐색 : O(logN)

  삽입/삭제 : O(logN)

 

2. hash set(unordered_set)

unordered_set<int> my_unordered_set = {1,2,3,4,5};

- 중복을 허용하지 않고 해쉬를 이용하기 때문에 정렬이 되어있지 않지만 탐색, 삽입, 삭제가 O(1)인 자료구조

- 시간복잡도

 탐색 : O(1)

 삽입/삭제 : O(1)

 

3. multiset

multiset<int> my_unordered_set = {1,2,3,4,5};

- 중복을 허용하는 자료구조

- set의 특성을 가짐

- 시간복잡도

  탐색 : O(logN)

  삽입/삭제 : O(logN)

 

set - 문법

1. 삽입, 삭제

set<int> mset;

mset.insert(2);
mset.insert(3);
mset.insert(4);
mset.erase(3);

 

2. 순회

set<int> mset;

//전위순회
for (int i=0; i<mset.size(); i++) {
	cout<<*next(mset.begin(),i)<<endl;
}

//후위순회
for (int i=1; i<=mset.size(); i++) {
	cout<<*prev(mset.end(),i)<<endl;
}

 

map

1. map

map<int, int> my_map

- set에서 key, value를 추가한 형태

- 시간복잡도

  탐색 : O(logN)

  삽입/삭제 : O(logN)

 

2. hash map

unordered_map<int, string> my_hash_map;

- hash로 구성된 map. 시간복잡도가 1이다

- 시간복잡도

 탐색 : O(1)

 삽입/삭제 : O(1)

 

3. multi map 

multimap<int, string> myMultimap = {{1,"One"}, {2,"Two"}, {3,"Three"}};

- map과 유사하며 중복을 허용한다.

- 시간복잡도

  탐색 : O(logN)

  삽입/삭제 : O(logN)

 

list(liked list)

list<int> my_list;

- 데이터를 저장할 때 다음 데이터의 위치도 같이 저장하는 리스트

- 시간복잡도

 탐색 : O(n)

 데이터 삽입/삭제 : O(1)

 

vector - 정의 및 시간복잡도

vector<int> v;

- 동적 array

- 시간복잡도

탐색 : O(n)

데이터 삽입/삭제 : O(n) (* 단 끝에 삽입, 삭제시 O(1))

 

vector - 문법

1. 삽입,삭제

vector<int> v;
value=10

// i번째 index에 삽입
v.insert(v.begin()+i,value);

// 맨 끝에 삽입
v.push_back(value)

// i번째 인덱스 삭제
v.erase(v.begin()+i)

 

2. 순회

// [전위순회]
// 1. for문
for (int x : v) printf("%d ", x);
// 2. index
for (int i = 0; i < v.size(); i++) printf("%d ", v[i]);
// 3. iterator
for (auto it = v.begin(); it != v.end(); ++it) printf("%d ", *it);

// [후위순회]
// 1. index
for (int i = v.size() - 1; i >= 0; i--) printf("%d ", v[i]);
// 2. reverse it
for (auto it = v.rbegin(); it != v.rend(); ++it) printf("%d ", *it);
// 3. it
for (auto it = v.end(); it != v.begin(); --it) printf("%d ", *it);

 

priority queue - 정의 및 시간복잡도

priority_queue<int, vector<int>, greater<int>> max_pq;
// default이기 때문에 priority_queue<int> max_pq 만 써도 된다
priority_queue<int, vector<int>, greater<int>> min_pq;

- 최댓값 or 최솟값을 root노드에 두어 즉시 접근할 수 있는 자료구조

- 시간복잡도

탐색 : O(n)

데이터 삽입/삭제 : O(logN) (* 단 끝에 삽입, 삭제시 O(1))

 

priority queue - 문법

1. 삽입/삭제

priority_queue<int> max_pq;

//삽입
max_pq.push(1);
max_pq.push(2);
max_pq.push(3);

//삭제
max_pq.top(); //루트노드 값 반환
max_pq.pop(); //루트노드 값 삭제

 

반응형