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 |
Tags
- bfs문제
- 영상처리
- 포스코 AI교육
- 초소형머신러닝
- BFS
- 컴퓨팅사고
- dfs
- tflite
- 포스코 교육
- 자료구조
- 코테
- TensorFlow Lite
- 그리디
- MCU 딥러닝
- dfs문제
- 딥러닝
- 삼성역테
- DP
- 코테 문제
- DP문제
- 코딩테스트
- sort
- 삼성역량테스트
- 포스코 ai 교육
- 삼성코딩테스트
- tinyml
- 삼성코테
- 알고리즘
- 임베디드 딥러닝
- 다이나믹프로그래밍
Archives
- Today
- Total
코딩뚠뚠
[개념정리] priority_queue 본문
반응형
priority_queue란
자료구조에서 우선순위큐는 먼저들어간데이터에 상관없이 우선순위가 높은 데이터가 먼저 반환되는 구조이다.
C++ STL에서 priority_queue를 이용하여 쉽게 구현해낼 수 있다.
vector container 기반으로 내부구조가 설정되어있다.
priority_queue사용
#include <queue>
선언
priority_queue<자료형>변수명; priority_queue<int>pq;
기본 사용
pq.push(element) // 우선순위큐에 원소 추가
pq.pop() //우선순위큐에서 top의 원소를 삭제
pq.top() //top에 있는 원소를 반환
pq.empty() //비어있으면 true 아니면 false 반환
pq.size() //우선순위큐에 포함되어있는 원소들의 수를 반환
기본적으로 내림차순으로 정렬되게 된다. 하지만 우선순위큐를 오름차순으로 바꿀 수 있다.
-> priority_queue<int, vector<int>, greater<int>>pq;
그렇다면 기본적인 내림차순 구조를 굳이 풀어쓴다면?
-> priority_queue<int, vector<int>, less<int>>pq;
pair를 이용한 사용
//priority_queue 에 greater 를 써서 오름차순으로 정렬해준다. 작은숫자가 먼저 나오게끔
priority_queue < pair<pair<int,int>,int>, vector<pair<pair<int,int>,int>>, greater<pair<pair<int,int>,int>> > pq;
// 내림차순은 기본
priority_queue < pair<pair<int, int>, int>> pq;
// push
pq.push({{a,b},c});
struct를 이용한 사용
struct test{
int x;
int y;
int z;
};
priority_queue<test, vector<test>> pq1; //기본 : 큰것 뽑을때
priority_queue<test, vector<test>, greater<test>> pq2; //작은것 뽑을때
compare를 통한 우선순위 정해주기
struct 사용 예시를 보면 분명 struct를 넣어줬는데 무엇을 기준으로 큰것, 작은것이 반환되는지 알 수 없다.
이를 지정해주기 위해 compare를 사용해준다.
struct test{
int x;
int y;
int z;
};
struct compare{
bool operator()(test a, test b){
if(a.z == b.z){
if(a.y == b.y){
return a.x > b.x;
}
return a.y > b.y;
}
return a.z > b.z;
}
}
priority_queue<test, vector<test>, compare> pq;
위의 코드에서는 우선순위를 z -> y -> x 순으로 잡은 것이고 오름차순 정렬을 수행한 예시이다.
좀더 간단한 예시로 보자.
struct compare{
bool operator()(int a, int b){
return a<b;
}
};
priority_queue<int, vector<int>, compare> pq;
이번엔 pair 와 compare를 같이 사용해보자
struct compare{
bool operator()(pair<int,int>a, pair<int,int>b){
return a.second>b.second;
}
};
priority_queue<pair<int,int>, vector<pair<int,int>>, compare> pq;
반응형
'알고리즘 문제풀이 > 개념정리' 카테고리의 다른 글
[개념정리] C/C++ 여러 input방법에 대해 (4) | 2020.12.27 |
---|---|
[개념정리] C++ 수식함수들 (0) | 2020.12.27 |
[개념정리] deque container (0) | 2020.12.26 |
[개념정리] map container (0) | 2020.12.26 |
[개념정리] memset함수 (0) | 2020.12.26 |