티스토리 뷰
https://en.cppreference.com/w/cpp/container/priority_queue
std::priority_queue - cppreference.com
template< class T, class Container = std::vector , class Compare = std::less > class priority_queue; A priority queue is a container adaptor that provides constant time lookup of the largest (by default) element, at the expense of logarit
en.cppreference.com
우선순위큐는 디폴트로 큐의 top에 큰 값이 오도록 정렬한다. (max heap)

top에 작은 값이 오도록 정렬하려면 (min heap) 따로 compare 구조체를 정의해도 되고,
세 번째 파라미터에 greater<> 함수를 써도 된다.

하지만 compare 구조체를 정의해서 사용하면 sort와 마찬가지로 내가 원하는대로 자동 정렬되도록 사용할수 있다.

첫 인자인 T는 구조체를 의미한다. 우선순위큐에 넣을 자료형을 써주면 된다.
두번째 인자인 컨테이너는 vector<T>가 들어간다. vector<첫번째 인자> 이런식으로 써준다.
세번째 인자가 내가 정의해서 쓸 compare 구조체다.
pair<int,int> 가 들어가는 priority_queue
우선순위큐 선언은 다음과 같이 해주면 된다
priority_queue<pair<int,int>, vector<pair<int,int>>, cmp> pq;
첫번째 인자에 우선순위큐에 넣을 pair<int,int>
두번째 인자에 vector<T>인 vector<pair<int,int>>
세번째 인자에 compare 구조체
pair의 두번째 요소 기준 오름차순 정렬하도록 compare 구조체 정의
struct cmp
{
bool operator()(const pair<int,int> &a, const pair<int,int> &b)
{
return a.second > b.second;
}
};
벡터의 sort 의 cmp 함수와 대소 비교가 반대인 이유는,
우선순위 큐는 우선순위 를 비교하기 때문이다.
여기서는 a가 기존 우선순위 큐의 top에 존재하는 값이고, b가 새로 push 한 값이라고 보면 된다.
a = {1,3}, b = {2,1} 라고 하면 b의 second값이 더 작기 때문에 a.second > b.second 는 true 를 반환하고
b가 우선순위를 갖는다고 보면 된다.
출력 결과

아래와 같이 세번째 파라미터에 그냥 greater<>이나 less<>를 줘도 무관하다.

vector<int>가 들어가는 priority_queue
우선순위 큐 선언
priority_queue<vector<int>, vector<vector<int>>, cmp> pq;
compare 구조체 정의 (vector[1] 기준 오름차순 정렬)
struct cmp
{
bool operator()(const vector<int> &a, const vector<int> &b)
{
return a[1] > b[1];
}
};
출력 결과

'노트' 카테고리의 다른 글
| kotlin 자주쓰는 함수 정리 (0) | 2021.12.31 |
|---|---|
| java) BufferedReader, BufferedWriter, StringBuilder (0) | 2021.12.30 |
| c++) cin.ignore() (0) | 2021.12.26 |
| 언어별 2차원 배열 입력 (0) | 2021.12.05 |
| c++) bitset 클래스 (0) | 2021.11.16 |
- Total
- Today
- Yesterday
- recursion
- db
- Brute Force
- 재귀
- dfs
- DP
- graph
- 자료구조
- two pointer
- C
- priority queue
- Kruskal
- Stack
- greedy
- floyd warshall
- 이분탐색
- permutation
- C++
- Unity
- Python
- Dijkstra
- binary search
- back tracking
- Implementation
- Tree
- Spring
- MVC
- CSS
- 조합
- BFS
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
