할머니의 콤퓨타 도전기

priority queue 비교 연산자 구현 본문

Program Language/C++

priority queue 비교 연산자 구현

ji.o.n.e 2021. 1. 30. 21:10

사용자 정의 비교 연산자 구현

  • 우선순위 큐 선언
#include <queue>
using namespace std;
int main(){
  priority_queue<int, vector<int>, compare> pq; // 자료형 int, 컨테이너 vector, 사용자 정의 비교연산자 compare

 

  • 비교 연산자 구현
  1. 정수를 오름차순으로 정렬하는 비교 연산자
struct compare{
    bool operator()(int a, int b){
     return a>b;
    }
};
  • 우선순위 큐 내부에 새로운 자료가 들어가면 자신의 부모 노드와 크기를 비교하면서 조건에 따라 swap
  • 위 코드에서 a는 부모 노드, b는 현재 노드
  • 만약 a가 b보다 크다면 true를 return에서 swap을 진행함
  • 이를 반복하면 조상 노드는 가장 작은 원소가 차지하게 됨
  1. 정수를 내림차순으로 정렬하는 비교 연산자
struct compare{
    bool operator()(int a, int b){
        return a<b; 
    }
};
  • 의 코드는 반대로 a가 b보다 크면 false 리턴. 따라서 swap 안함
  • 조상 노드는 가장 큰 원소가 차지
  • compare를 구현하기 위한 핵심은, 두 자료를 비교했을 때 swap을 해줄 것인지 말 것인지 결정하는 것
  1. pair의 second를 기준으로 오름차순 정렬
struct compare{
    bool operator()(pair<int, int> a, pair<int, int> b){
        return a.second > b.second;
    }
};
int main(){
    priority_queue<pair<int, int>, vector<pair<int, int>>, compare> pq;
}

'Program Language > C++' 카테고리의 다른 글

(C++) 벡터 중복원소 제거  (0) 2021.01.30
(C++) tolower, toupper 대소문자 변환  (0) 2021.01.30
(STL) map vs unordered_map  (0) 2021.01.06
(STL) deque 사용법  (0) 2020.08.03
(STL) map 사용법  (0) 2020.08.03
Comments