Search

우선순위 큐(prority queue)

Node를 저장 해두는 자료구조중 하나이다.
pop할때 저장된 노드중에서 우선순위가 가장 높은 노드가 먼저 나온다.
통상적으로 c++ <prority queue>는 heap으로 구현이 되어있다.
STL에서도 역시 힙을 사용한다.
Heap / 힙 힙 은 완전이진트리( complete binary tree ) 기반 자료구조이며, 최댓값 혹은 최솟값 을 빠르게 찾을수 있는 자료구조이다. 부모 자식간의 관계만 중요하며 형제 노드들과는 관계가 없다.
<prority queue> 는 MAX HEAP 디폴트 값이다.
top에는 항상 MAX값이 들어있다.
std::priority_queue<int> pq; pq.push(3); pq.push(7); pq.push(6); pq.push(3); pq.push(4); pq.push(2); int top = pq.top(); return 0;
Python
복사
최소값을 기준으로 우선순위를 두고싶다면 다음과 같은 명령어를 추가하면된다.
int main() { std::priority_queue<int, std::vector<int> , std::greater<int>> pq; pq.push(3); pq.push(7); pq.push(6); pq.push(3); pq.push(4); pq.push(2); int top = pq.top(); return 0; }
Python
복사
원하는 조건을 만들어서 우선순위를 비교할수도 있다.
#pragma once #include <iostream> #include <queue> struct Node { int num; char ch; }; bool operator<(Node a, Node b) { return a.ch < b.ch; } int main() { std::priority_queue<Node> pq; pq.push({3, 'H'}); pq.push({7, 'G'}); pq.push({6, 'B'}); pq.push({3, 'D'}); pq.push({4, 'K'}); pq.push({ 2, 'F' }); pq.push({ 2, 'Z' }); //int top = pq.top(); //int a = 10; //int b = 20; //a < b; return 0; }
Python
복사