알고리즘 문제를 풀다보면, 우선순위큐를 사용할 일이 많다. 우선순위큐의 장점은 원하는 구조체를 선언하고 원하는대로 정렬 방식을 정할 수 있다는 것이다.
typedef struct item {
string pre;
int number;
int idx;
item(string p, int n, int i) : pre(p), number(n), idx(i) {};
}item;
struct cmp {
bool operator()(item i1, item i2) {
if (i1.pre.compare(i2.pre) == 0) {
if (i1.number == i2.number)
else
return i1.number > i2.number;
}
else
return i1.pre.compare(i2.pre) > 0;
}
};
위 예제는, 알고리즘 문제를 풀다가 작성한 코드이다. 여기서, 코드를 이해할 필요는 없고, 다양한 변수들을 대소 관계로 정렬할 수 있다는 게 핵심이다.
우선순위큐를 자주 사용하지 않은 사람들은 cmp 구조체를 선언하는데 익숙하지 않을 것이며, 또한 동작도 다르게 한다.
struct cmp {
bool operator()(item i1, item i2) {
....
위의 함수는 return 값이 true일 경우 i1과 i2를 그대로 두고, false일 경우 i1과 i2를 swap한다.
여기서 주목해야할 것은, i2가 먼저 pop되는 아이템이라는 것이다.
헷갈릴 수 있는 것은 vector같은 자료구조로 sort를 할 때와는 반대이다. vector는 앞에서 부터 값을 참조하고 priority_queue는 뒤에서 부터 값을 참조하므로 비교 함수가 반대로 작성되는 것이다.
이 부분을 기억하면, cmp 구조체를 착각해서 작성할 일은 없을 것이다.
'컴퓨터공학 > 자료구조' 카테고리의 다른 글
정렬별 시간복잡도를 생각해보자(Bubble Sort, Selection Sort, Insertion Sort, Quick Sort, Merge Sort, Heap Sort, Time Complexity) (0) | 2020.11.21 |
---|---|
힙 트리란 무엇일까(Max, Min Heap Tree) (0) | 2020.11.20 |
[JAVA] 알고리즘에서 자주 쓰이는 자료구조 정리(예제, 사용시기, 백준, 프로그래머스, 필수 자료구조) (0) | 2020.08.29 |
Trie(트라이) 자료구조 정의, 예제 코드 (0) | 2019.12.01 |
[C++] Set 자료구조 역순으로 자료 참조하기 (0) | 2019.10.05 |