Problem Solving/알고리즘

priority_queue 사용자 정의 비교 함수

돌돌김 2020. 11. 8. 01:46
  • 우선순위 큐 사용자 정의 비교함수 작성
    • 우선순위 큐에 넣어서 비교해야할 요소가 3개 이상 있을 경우, 연산자 오버라이딩을 해야 한다.
    • 이 때, 중요한 것은 단순히 리턴타입이 단순히 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;
      }