티스토리 뷰

정리

c++ priority_queue

logwns 2022. 1. 14. 16:05

1. 우선순위 큐 = 힙

    priority_queue<int> pq;
    priority_queue<int, vector<int>, less<int>> l_pq;
    priority_queue<int, vector<int>, greater<int>> g_pq;

    for (int i = 0; i < 4; i++) { // 0 1 2 3
        pq.push(i);
        l_pq.push(i);
        g_pq.push(i);
    }

    while (pq.size()) { // 3 2 1 0
        cout << pq.top();
        pq.pop();
    }

    while (l_pq.size()) { // 3 2 1 0
        cout << l_pq.top();
        l_pq.pop();
    }

    while (g_pq.size()) { // 0 1 2 3
        cout << g_pq.top();
        g_pq.pop();
    }

pair 사용시 first의 우선순위를 먼저 보고 같다면 second를 본다.

 

 

2. 구조체를 사용한 우선순위 큐

struct node {
    int x, y;
};

struct compare {
    bool operator()(node& a, node& b) {
        return a.x < b.x;
    }
};

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);

    priority_queue<node, vector<node>, compare> pq;

    for (int i = 0; i < 4; i++) pq.push({ i,0 }); // {0,0} {1,0} {2,0} {3,0}

    while (pq.size()) {
        node it = pq.top();
        pq.pop();
        cout << it.x << ' ' << it.y << '\n'; // {3,0} {2,0} {1,0} {0,0}
    }
    
    return 0;
}

operator로 우선순위를 정해줄 수 있다.

sort에서 compare을 만들때와 반대로 a<b 이면 큰 값이 우선순위를 가지고 a>b이면 작은 값이 우선순위를 가진다.

bool compare(int a, int b) {
    return a > b;
}

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);

    vector<int> ar(4);
    for (int i = 0; i < 4; i++) ar[i] = i; // 0 1 2 3
    sort(ar.begin(), ar.end(), compare);

    for (int it : ar) cout << it << ' '; // 3 2 1 0
    return 0;
}

 

'정리' 카테고리의 다른 글

segment tree  (0) 2021.07.12
Heavy-Light Decomposition  (0) 2021.07.07
LCA  (0) 2021.07.01
그리디 문제 풀기  (0) 2021.06.25
이항계수를 어떤수로 나눴을 때 값 구하기  (0) 2021.06.25
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함