이 때, 중요한 것은 단순히 리턴타입이 단순히 bool 인 함수를 만드는 것이 아닌 연산자 오버라이딩이다.
struct INFO{
int y;
int x;
int z;
};
struct cmp{
bool operator()(INFO a, INFO b){
if(a.y == b.y){
if(a.x == b.x){
return a.z < b.z; // z는 오름차순
}
return a.x > b.x; // x는 오름차순
}
return a.y < b.y; // y는 내림차순
}
};
int main() {
priority_queue<INFO, vector<INFO>, cmp>pq;
pq.push({1,2,3});
pq.push({3,1,2});
pq.push({4,1,1});
pq.push({2,4,3});
pq.push({2,5,3});
pq.push({2,0,3});
while(!pq.empty()){
cout<<pq.top().y << ' '<<pq.top().x<<' '<<pq.top().z <<endl;
pq.pop();
}
/*
4 1 1
3 1 2
2 0 3
2 4 3
2 5 3
1 2 3
*/
return 0;
}