구조체를 활용한 priority_queue 비교함수

2019. 5. 14. 22:03알고리즘/암기

먼저 우선순위 큐는 보통 힙의 구조를 가지는 비선형 자료구조다.

배열로 구성할 경우엔 1. 자료의 낭비 2. 삽입에서 시간을 크게 잡아먹는다. 또한 연결리스트로 구성할 경우에도 삽입 시간이 배열과 같기에 더 낫다.

따라서 logN의 시간으로 삽입과 삭제를 할 수 있는 힙의 구조로 우선순위 큐를 작성할 수 있다

 

그래서 priority_queue에 우선순위를 줘야 하는데 기본적으로 우선순위는 큰 값이 높게 설정되어 있다

따라서 큰 수부터 출력하고 싶으면 우선순위 큐를 선언만하고 사용하면 된다

문제: https://www.acmicpc.net/problem/11279

https://github.com/surinoel/boj/blob/master/11729.cpp

 

하지만 특정한 구조체에서는 각기 다른 경우의 수들이 우선순위를 정할 수 있다

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
32
33
34
35
#include <queue>
#include <iostream>
 
using namespace std;
 
struct custom {
    int x, y, value;
    custom(int v) : x(0), y(0), value(v) {}
};
 
struct cmp {
    bool operator()(const custom &u, const custom &v) {
        return u.value > v.value;
    }
};
 
int main(void) {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
 
    priority_queue<custom, vector<custom>, cmp> pq;
    pq.push(custom(5));
    pq.push(custom(2));
    pq.push(custom(8));
    pq.push(custom(9));
    pq.push(custom(1));
    pq.push(custom(14));
 
    while (!pq.empty()) {
        cout << pq.top().value << '\n';
        pq.pop();
    }
 
    return 0;
}
cs

'알고리즘 > 암기' 카테고리의 다른 글

파라메트릭 서치  (0) 2019.05.14
Disjoint-set  (0) 2019.05.14
구조체 초기화  (0) 2019.05.11
입력 갯수를 확인하는 2가지 방법  (0) 2019.05.08
string class 함수  (0) 2019.05.02