euzl / Algorithm

ㅇㅏㄹㄱㅗㄹㅣㅈㅡㅁ
0 stars 0 forks source link

priority_queue 를 적절히 활용하자! #31

Open euzl opened 4 years ago

euzl commented 4 years ago
#include <queue>
priority_queue<자료형T, 컨테이너<T>, 비교함수클래스> 이름;

자료형 : 클래스도 가능 컨테이너 : 무난하게 vector 사용하면 된다! 비교함수 클래스 : 커스텀 가능! 밑에 코드 참고

priority_queue<자료형T> 이름; 이렇게하면 기본형 사용가능! 내림차순 priority_queue<자료형T, greater<>()> 이름; 오름차순

#include <queue>
#include <iostream>
using namespace std;

struct cmp {
    bool operator()(int a, int b) {return a<b;}
};
int main() {
    priority_queue<int, vector<int>, cmp> queue;
    queue.push(3);
    queue.push(5);
    queue.push(2);
    while(!queue.empty()) {
        cout<<queue.top()<<endl;
        queue.pop();
    }
    return 0;
}
euzl commented 3 years ago

pair 는 이런식으로

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;
}
euzl commented 3 years ago

ㅇㅣ것도 참고 https://koosaga.com/9

bool operator<(user a, user b) {
    return a.age > b.age ? true : a.idx > b.idx;  // 오름차순 정렬
}

priority_queue<user> userQueue;

이렇게 연산자 오버로딩으로 해도 가능.