priority_queue<'자료형', '구현체', '비교연산자'> 이름;
자료형
: int, double, pair 등 기본 자료형 및 구조체, 클래스 등을 사용한다.구현체
: 보통 vector<자료형>
으로 구현한다. 지정하지 않으면 vector로 기본 적용.비교연산자
: 비교를 위한 기준을 알려준다.내림차순 - 최대힙
priority_queue<int> pq;
오름차순 - 최소힙
priority_queue<int, vector<int>, greater<int>> pq;
greater<int>
를 사용하면 오름차순으로 정렬된다.사용자 설정
struct compare
{
bool operator()(int a, int b)
{
return a > b; // priority_queue에 적용 시 부모 노드와 크기를 비교해
// a가 b보다 크면 true를 리턴해 swap할 것
}
}
int main()
{
priority_queue<int, vector<int>, compare> pq;
}
출력 결과: 8, 5, 2, 1
priority_queue<int, vector<int>, less<int>> pq1;
pq1.push(5);
pq1.push(2);
pq1.push(8);
pq1.push(9);
pq1.push(1);
pq1.push(14);
pq1.pop();
pq1.pop();
출력 결과: 5, 8, 9, 14
priority_queue<int, vector<int>, greater<int>> pq2;
pq2.push(5);
pq2.push(2);
pq2.push(8);
pq2.push(9);
pq2.push(1);
pq2.push(14);
pq2.pop();
pq2.pop();
emplace
를 유용하게 사용할 수 있다.priority_queue<pair<char, int>> pq;
pq.push(pair<char, int>('a', 2)); // push 사용 시 pair<char, int>()로 오브젝트 생성
pq.emplace('b', 1); // emplace 사용 시 pair 오브젝트 만들지 않고 바로 값을 입력