Doby's Lab

[자료구조] 우선순위 큐, 비교 연산자 (C++) 본문

PS/Study Note

[자료구조] 우선순위 큐, 비교 연산자 (C++)

도비(Doby) 2021. 11. 30. 13:18

https://draw-code-boy.tistory.com/47

 

[자료구조] 우선순위 큐 (Priority Queue) 개념, C++ STL

우선순위 큐란 큐의 한 종류로 말 그대로 우선순위대로 큐에 데이터를 집어넣는다. (여기서 말하는 우선순위란 값의 크기의 오름차순 혹은 내림차순 등 사용자가 정할 수 있다.) 일반적인 큐는

draw-code-boy.tistory.com

저번에 우선순위 큐를 다룬 적이 있다. 이번 다익스트라를 공부하면서 우선순위 큐로도 구현할 수 있는 것을 공부했는데 이번 기회에 저번에 남았던 궁금증을 해결해보려 한다.

왜 비교 연산자가 반대로 작용할까?

답은 쉽게 구할 수 있었다. (https://hydroponicglass.tistory.com/169)

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

struct cmp {
	bool operator()(int a, int b) {
		return a > b;
	}
};

int main() {
	priority_queue<int, vector<int>, cmp> pq;
	pq.push(7);
	pq.push(3);
	pq.push(1);

	while (!pq.empty()) {
		cout << pq.top() << '\n';
		pq.pop();
	}

	return 0;
}

cmp라는 비교 연산자를 struct를 통해 구현했다.

이때의 operator의 역할이 궁금증을 해결한다. 언뜻 보면 제일 큰 값으로 와있어야 한다.

하지만, operator(비교 연산자)의 의미는 조건에 따라 swap을 하는 것이다.

위에 코드 블록에서의 의미는 a > b가 true이면 true를 리턴해서 swap을 진행한다.

즉, a < b로 만들겠다는 의미다.

728x90