728x90
반응형
우선순위 큐 자료구조를 이용할 때, 구조체를 이용할 때가 있는데 이럴 땐 어떻게 큐를 정의하는 지 살펴보자.
기본 자료형
sort와 같은 방식으로, greater, less를 이용한다.
priority_queue<int, vector<int>, greater<int>> pq; // 오름차순
주의할 점은 algorithm 내 sort의 greater은 내림차순이고,
우선순위 큐의 sort의 greater은 오름차순이다.
구조체
이번에는 compare 구조체를 만들어서 대소비교하는 operator 함수를 오버로딩한다.
여기서 주의해야할 점은 인자의 순서다.
right, left 순서로 정의해 주어야 한다.
struct compare {
bool operator()(const Struct right, const Struct left) {
return s1.value < s2.value;
}
};
priority_queue<Struct, vector<Struct>, compare> pq;
우선순위 큐의 특징
1. 완전 이진트리 형태의 힙을 이용해 구현한다.
2. 삽입과 삭제는 O(logN)의 시간복잡도를 가진다.
3. 정렬은 O(N*logN)의 시간복잡도를 가진다.
Sort vs Priorty Queue
Sort 와 Priorty Queue큐 중 어떤 것을 써야할까?
Sort 이용시 최악의 경우 시간복잡도가 O(N^2)이기 때문에 Priority Queue가 더 낫지 않을까 생각한다.
다음의 외부 포스팅을 참고해보면 실제로 테스트 결과 퀵소트보다 Priority Queue가 더 빠르다는 것을 확인할 수 있다.
728x90
반응형
'알고리즘' 카테고리의 다른 글
[알고리즘] 구조체 정렬 / C++ (0) | 2023.01.02 |
---|---|
[알고리즘] 소수구하기 - 에라토스테네스의 체 / C++ (0) | 2022.05.10 |
[알고리즘] Dynamic Programming (DB) (0) | 2022.04.13 |
[C++] string 내장 함수 : find, npos, substr, erase, to_string, stoi, isdigit, isalpha, tolower/toupper (0) | 2022.04.07 |
[이것이 코딩테스트다] 시간제한 판단법 (0) | 2021.05.10 |