Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Set
- 최소공배수
- vector
- BFS
- 오블완
- 티스토리챌린지
- N과M
- 백준
- 알고리즘
- 그래프
- 우선순위큐
- 정렬
- stoi
- Sort
- 이분탐색
- DFS
- C++
- priority_queue
- 백트래킹
- 배열
- 유클리드호제법
- 프로그래머스
- 다이나믹프로그래밍
- DP
- int
- 문자열
- map
- 깊이우선탐색
- 분할정복
- 에라토스테네스의 체
Archives
- Today
- Total
안녕 세상아,
[c++/queue/heap] STL::priority_queue (우선순위 큐) 본문
우선순위 큐란?
일반적인 큐와 달리 선입선출 구조가 아닌 큐에 있는 모든 원소 중에서 가장 큰 값이 top을 유지하도록, 우선순위가 가장 크도록 설계되어있다. 또한 내부적으로 heap이라는 자료구조를 사용하고있다.
#include <queue> 선언해야한다.
기본 메소드
- push() : 우선순위 큐에 원소를 추가한다
- pop() : 우선순위 큐에서 top의 원소를 제거한다
- top() : 우선순위 큐에서 top에 있는 원소 즉 우선순위가 높은 원소를 반환한다.
- empty() : 우선순위 큐가 비어있으면 true를 반환하고 그렇지 않으면 false를 반환한다
- size() : 우선순위 큐에 포함되어 있는 원소의 수를 반환한다
기본 자료형 사용법
#include <iostream>
#include <queue>
using namespace std;
int main() {
priority_queue<int> pq; // - > priority_queue<int, vector<int>, less<int>> pq;
// 우선순위 큐에 원소를 삽입 (push) 한다
pq.push(4);
pq.push(7);
pq.push(3);
pq.push(1);
pq.push(10);
cout << "우선순위 큐 사이즈 : " << pq.size() << "\n"; // 5
// 우선순위 큐가 비어 있지 않다면 while 문을 계속 실행
while (!pq.empty()) {
cout << pq.top() << '\n'; // 10 7 4 3 1
pq.pop();
}
return 0;
}
가장 큰 값부터 출력되는 것을 볼 수 있다. 작은 값부터 출력하고 싶을 때는
priority_queue<int, vector<int>, greater<int>> pq;
다음과 같이 우선순위 큐를 선언해주어야 한다.
구조체 활용 및 구조체 내부 연산자 오버로딩
학번을 기준으로 우선순위가 높게 설정을 해봤다. 구조체 내부의 연산자 오버로딩 부분을 조작하면 수학 점수와 영어 점수를 기준으로 우선순위 큐 내부의 우선순위를 설정할 수 있다.
struct Student{
string name;
int score;
bool operator < (const Student& st) const{ //정의 꼭 따로 해줘야함. 없으면 오류남
return score < st.score;
}
};
int main(){
priority_queue<Student> students;
students.push({"Amelia",80});
students.push({"Sophia",40});
students.push({"Olivia",95});
students.push({"George",70});
//출력
while(!students.empty()){
auto& s=students.top();
cout<<s.name<<"("<<s.score<<")"<<endl;
students.pop();
}
//Olivia (95)
//Amelia (80)
//Geroge (70)
//Sophia (40)
}
struct 안에 operator 꼭 지정해줘야한다. 아니면 작동이 아예 안됨 (오류남)
'c++ 개념' 카테고리의 다른 글
[c++/알고리즘] 에라토스테네스의 체 (0) | 2023.05.10 |
---|---|
[c++/struct] 구조체(struct) 정렬하기 (vector 사용) (0) | 2023.05.08 |
[c++/자료형] 데이터 형식 범위, 개념 (0) | 2023.05.07 |
[c++/그래프] BFS (너비 우선 탐색) (0) | 2023.05.05 |
[c++/그래프] DFS (깊이 우선 탐색) (0) | 2023.05.03 |