공부/코딩
C++과 Java에서 Priority Queue의 차이점
finding wangdo
2023. 10. 19. 21:28
C++에서는
#include <queue>
를 해주고 Java에서는
import java.util.PriorityQueue;
를 해주어 Priority Queue(우선순위 큐) 자료구조를 사용할 수 있게 해준다.
1. Priority Queue 선언
C++:
priority_queue<int> pq_int;
priority_queue<long long> pq pq_ll;
이와 같이 priority_queue<자료형>으로 선언할 수 있다.
Java:
PriorityQueue<int> pq = new PriorityQueue<>();
자바에서는 new 뒤까지 써주어야 한다.
2. 우선 순위
C++에서는 기본적으로 Priority Queue가 큰 값을 우선순위로 두지만 Java는 작은 값을 우선순위로 둔다.
예를 들어 1, 3, 5, 7이 Priority Queue 안에 들어있을 때, C++에서 첫 번째 값을 반환하는 함수인
pq.top()
는 7을 반환하고 Java에서 첫 번째 값을 반환하는 함수인
pq.peek()
는 1을 반환한다.
3. Priority Queue에서 사용되는 함수(메소드)
Priority Queue에서 사용되는 함수로는
- 요소 삽입 (push)
- 첫 번째 요소 반환
- 첫 번째 요소 삭제 (pop)
- 비어있는지 확인
가 대표적이다.
C++에서는 이렇게 쓴다.
pq.push(x); // pq에 x를 삽입 (push)
y = pq.top(); // pq의 첫 번째 요소를 반환해 y에 저장
pq.pop(); // pq의 첫 번째 요소 삭제 (pop)
pq.empty(); // pq가 비어있다면 true, 아니라면 false 반환
Java에서는 이렇게 쓴다.
pq.add(x);
pq.insert(x)
// add와 insert 둘 중 어느 것을 사용해도 된다. (push)
pq.peek(); // 첫 번째 값 반환. 만약 pq가 비어있다면 null 반환.
pq.element(); // 첫 번째 값 반환. 만약 비어있다면 예외발생.
// 기능은 같지만 필요에 따라 골라 쓰면 된다.
pq.poll(); // 첫 번째 값을 반환하면서 제거함. 만약 비어있다면 null 반환 (pop)
pq.remove(); // 첫 번째 값 제거. 만약 비어있다면 예외발생. (pop)
// 역시나 필요에 따라 골라 쓰면 된다.
pq.isEmpty() // 비어있다면 true, 아니라면 false 반환
4. 정리
아무래도 가장 중요한 차이점은 C++에선 큰 게 우선이고 Java에서는 작은 게 우선이라는 거다. ChatGPT한테 C++ 코드를 Java로 바꿔달라고 했더니 그 차이점을 몰라서인지 코드를 잘못 구현해놓은 적이 있다.
아래는 Priority Queue를 사용해야 하는 백준 문제 하나 추천.