C++에서 std::priority_queue의 사용법은?
_____A1: std::priority_queue는 C++ 표준 라이브러리의 컨테이너 어댑터로, 우선순위가 가장 높은 원소(top)를 빠르게 접근할 수 있는 큐 자료구조입니다. 내부적으로 힙(주로 최대 힙)을 사용하여 원소들을 관리합니다.
---
Q2: std::priority_queue를 사용하려면 어떤 헤더를 포함해야 하나요?
A2: 다음 헤더를 포함해야 합니다.
```cpp
include
```
---
Q3: std::priority_queue의 기본 선언 방법은 어떻게 되나요?
A3: 기본적으로 최대 힙(큰 값이 우선순위가 높음)으로 작동합니다. 선언 예:
```cpp
std::priority_queue
```
---
Q4: std::priority_queue에 원소를 추가하는 방법은?
A4: push() 멤버 함수를 사용합니다.
```cpp
pq.push(10);
pq.push(5);
```
---
Q5: std::priority_queue에서 가장 큰 원소에 접근하는 방법은?
A5: top() 멤버 함수를 사용하여 최우선 순위 원소를 읽을 수 있습니다.
```cpp
int maxVal = pq.top();
```
---
Q6: std::priority_queue에서 우선순위가 가장 높은 원소를 제거하는 방법은?
A6: pop() 멤버 함수를 사용합니다. 이 함수는 원소를 반환하지 않고 제거만 합니다.
```cpp
pq.pop();
```
---
Q7: std::priority_queue의 크기나 비어있는지 확인하는 멤버 함수는?
A7:
- size(): 현재 원소 개수 반환
- empty(): 비어있으면 true 반환
```cpp
if (!pq.empty()) {
size_t n = pq.size();
}
```
---
Q8: std::priority_queue를 최소 힙(min heap)처럼 사용하려면 어떻게 하나요?
A8: 기본은 최대 힙이므로, 비교 함수를 변경하거나 std::greater를 사용해야 합니다.
```cpp
std::priority_queue
```
---
Q9: std::priority_queue의 내부 컨테이너 타입을 바꿀 수 있나요?
A9: 네, 두 번째 템플릿 인자에 컨테이너 타입을 지정할 수 있습니다. 기본 값은 std::vector입니다.
```cpp
std::priority_queue
---
Q10: std::priority_queue에 초기값으로 여러 원소를 넣는 방법은?
A10: 생성자에 컨테이너를 전달할 수 있습니다. 예:
```cpp
std::vector
std::priority_queue
```
---
Q11: std::priority_queue를 순회하며 모든 원소를 읽는 방법은?
A11: std::priority_queue는 iterator를 지원하지 않으므로, 원소를 꺼내가며 확인합니다.
```cpp
while (!pq.empty()) {
std::cout << pq.top() << "\n";
pq.pop();
}
```
---
Q12: std::priority_queue 사용 시 주의할 점은?
A12:
- pop()은 반환값이 없으므로, top()으로 값을 확인 후 pop()해야 함
- iterator 제공 안함 (직접 순회 불가)
- 내부 컨테이너가 변경되면 힙 성질이 깨질 수 있으니 직접 조작하지 말 것
---
Q13: 커스텀 타입을 std::priority_queue에 넣으려면 어떻게 해야 하나요?
A13: 커스텀 타입에 대해 비교 연산자(operator<)를 정의하거나, 커스텀 비교 함수 객체를 만들어 세 번째 템플릿 매개변수로 지정하세요. 예:
```cpp
struct Item {
int priority;
// ...
bool operator<(const Item& other) const {
return priority < other.priority; // 최대 힙
}
};
std::priority_queue
```
또는
```cpp
struct Compare {
bool operator()(const Item& a, const Item& b) {
return a.priority > b.priority; // 최소 힙 처럼 동작
}
};
std::priority_queue
```
---
Q14: std::priority_queue 내부 원소를 직접 수정할 수 있나요?
A14: 아니요, 내부 구조가 힙이기 때문에 원소 수정 시 힙 속성이 깨질 수 있습니다. 원소를 수정하려면 삭제 후 재삽입하는 방식으로 해야 합니다.
---
Q15: std::priority_queue에서 가장 낮은 우선순위를 가진 원소를 빠르게 찾을 수 있나요?
A15: 직접적으로는 불가능합니다. std::priority_queue는 최우선순위 원소(top)만 빠르게 접근 가능하며, 나머지는 힙 구조에 묻혀 있습니다.
---
이상으로 기본적인 std::priority_queue 사용법 및 주요 Q&A를 정리하였습니다.
작성자:
김현호 [비회원]
| 작성일자: 1년 전
2024-09-20 17:11:38
조회수: 196 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
조회수: 196 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.