반응형
우선순위 큐는 힙을 이용하여 루트에 우선순위에 따라 최대값 혹은 최소값이 있는 것을 말한다.
선언
struct cmp{
bool operator()(int a, int b){
return a>b;
}
}
#include <queue>
priority_queue<int> q1; // 루트가 최대인 우선순위 큐 선언
priority_queue<int, vector<int>, greater<int>>; // 루트가 최소값인 우선순위 큐 선언
priority_queue<int, vector<int>, cmp>;// 루트가 최소값인 우선순위 큐 선언
- 자신이 직접 우선순위를 정할 때는 구조체를 생성해주어야한다.
주의 할 것은 벡터는 위와 같이 비교연산을 하면 내림차순으로 정렬된다.
하지만 우선순위 큐는 a가 루트에 있는 값이기 때문에 a가 더 크면 true를 반환한다.
반환값이 true이면 swap를 하겠다는 의미이기 때문에 a와 b가 바뀌게 되어 최소값이 루트에 위치하게 된다.
기본 사용법
q.push(1); // 원소 넣기
q.empty(); // 비었으면 true 반환
q.top(); // 루트에 있는 값 반환
q.pop(); // 루트에 있는 값 제거
- 기본적으로 queue와 사용법이 같다. 다른 것은 우선순위에 따라 정렬이 된다는 것이다.
클래스를 이용한 우선순위 큐 활용
ex) 과일을 가격의 오름차순으로 정렬하여 보여줌
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
#include <iostream>
#include <string>
#include <queue>
using namespace std;
class fruit{
private:
string name;
int price;
public:
fruit(string m_name, int m_price){
name = m_name;
price = m_price;
}
int get_price(){
return price;
}
string get_name(){
return name;
}
bool operator<(const fruit& a) const {
return this->price < a.price;
}
};
struct cmp{
bool operator()(fruit a, fruit b){
return a.get_price() > b.get_price();
}
};
int main() {
priority_queue<fruit, vector<fruit>, cmp> q;
fruit lemon("lemon", 100);
fruit apple("apple", 10);
fruit banana("banana", 300);
q.push(lemon);
q.push(apple);
q.push(banana);
while(!q.empty()){
fruit cc = q.top();
cout << cc.get_name() << " " << cc.get_price() << endl;
q.pop();
}
return 0;
}
|
cs |
- 결과: apple 10
lemon 100
banana 300 - 이런식으로 우선순위 큐를 class를 통해 활용할 수 있다!
반응형
'언어 > C++' 카테고리의 다른 글
[C++] set, multiset 간단 사용법 (0) | 2022.04.05 |
---|---|
C++ 비트 마스킹 (비트 연산) [컴공과고씨] (0) | 2022.04.03 |
C++ Vector(벡터) - find, erase, unique, sort, upper_bound, lower_bound 사용법 (0) | 2022.04.02 |