pop을 하는 경우, 가장 먼저 들어온 원소가 나오는 대신, 우선순위가 가장 높은 원소가 나오는 큐!
힙 구조 활용!!!
priority_queue<int, vector<int>, greater<int>> pq;
-> 최소힙!!
#include<iostream>
#include<queue>
#include<cmath>
using namespace std;
struct cmp {
bool operator()(int first, int second) {
if (abs(first) > abs(second)) return true; // 절대값이 작은 것에 우선순위를 높게 주겠다!! -> 일반 sort와 반대로 생각!!
else if (abs(first) == abs(second)) {
if (first > second) return true; // 절대값이 같다면 원래 값이 더 작은 것에 우선순위 높게 주겠다
else return false;
}
else return false;
}
};
int main(void) {
ios::sync_with_stdio(0);
cin.tie(0);
priority_queue<int, vector<int>, cmp> pq;
pq.push(1);
pq.push(-1);
pq.push(-5);
pq.push(5);
pq.push(8);
pq.push(-12);
while (!pq.empty()) {
cout << pq.top() << " ";
pq.pop();
}
return 0;
}
' c++/ 자료구조&알고리즘 개념 복습하기 11 ' 에 구조체 타입의 priority_queue의 비교 함수 구현 내용도 있으므로 참고하기!