Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- enumasByue
- 스마트포인터
- stl
- C++
- dataasset
- moreeffectiveC++
- 선택정렬
- C++최적화
- 자료구조
- 데이터애셋
- UELOG
- map
- UE_LOG
- UML관련
- 알고리즘
- 크리티컬섹션
- 언리얼엔진구조체
- 약참조
- 프로그래머스
- unorder_map
- 람다사용정렬
- 람다
- BFS
- 정렬
- 애셋로드
- UE4 커스텀로그
- 정렬알고리즘
- 델리게이트
- 강참조
- 언리얼가비지컬렉터
Archives
- Today
- Total
기억을 위한 기록들
[C++/STL] 우선순위 큐(priority_queue) 관련 본문
0. 기본 우선순위는 less (내림차순 높은값이 루트값)
#include<iostream>
#include<vector>
#include<queue>
using namespace std;
int main() {
//priority_queue<자료형,컨테이너 타입,우선순위>
//아무것도 입력하지 않으면 기본 정렬은 less
priority_queue<int> pq;
pq.push(4); //원소 추가 push
pq.push(20);
pq.push(3);
pq.push(9);
pq.push(1);
pq.pop();//원소 제거 // 가장 높은 수인 20 제거 됨
cout <<"루트 값은 : "<< pq.top() << '\n';//가장 위에 있는 원소 반환
if (!pq.empty()) //비어 있는지 여부
{
cout <<"크기는 : "<< pq.size() << '\n';//크기 반환
}
return 0;
}
1.우선 순위 less (내림차순, 가장 높은값이 루트값)
#include<iostream>
#include<vector>
#include<queue>
using namespace std;
int main(){
//priority_queue<자료형,컨테이너 타입,우선순위>
priority_queue<int, vector<int>, less<int>> pq;
pq.push(4); //원소 추가 push
pq.push(20);
pq.push(3);
pq.push(9);
pq.push(1);
pq.pop();//원소 제거 // 가장 높은 수인 20 제거 됨
cout <<"루트 값은 : "<< pq.top() << '\n';//가장 위에 있는 원소 반환
if (!pq.empty()) //비어 있는지 여부
{
cout <<"크기는 : "<< pq.size() << '\n';//크기 반환
}
return 0;
}
2.우선 순위 greater (오름차순, 가장 낮은 값이 루트값)
#include<iostream>
#include<vector>
#include<queue>
using namespace std;
int main(){
//priority_queue<자료형,컨테이너 타입,우선순위>
priority_queue<int, vector<int>, greater<int>> pq; //less 대신 greater
pq.push(4); //원소 추가 push
pq.push(20);
pq.push(3);
pq.push(9);
pq.push(1);
pq.pop();//원소 제거 // 가장 낮은 수인 1 제거 됨
cout<<pq.top()<<'\n';//원소 반환
if (!pq.empty()) //비어 있는지 여부
{
cout << pq.size() << '\n';//크기 반환
}
return 0;
}
3. 임의의 연산자 오버로딩 응용
#include<iostream>
#include<vector>
#include<queue>
using namespace std;
struct Location {
Location(int _x, int _y)
{
mX = _x;
mY = _y;
}
int mX;
int mY;
bool operator<(const Location &target) const {
return target.mX > mX;
}
};
int main(){
//priority_queue<자료형,컨테이너 타입,우선순위>
priority_queue<Location> pq;
pq.push(Location(45, 20)); //18번줄로 인해 x값이 더 큰게 루트로가는 push
pq.push(Location(4,2));
pq.push(Location(6, 10));
pq.push(Location(9, 15));
pq.pop();//원소 제거 // 가장 큰수인 45,20 제거
cout <<"루트값은 : "<< pq.top().mX<<", "<<pq.top().mY << endl;;
if (!pq.empty()) //비어 있는지 여부
{
cout << pq.size() << '\n';//크기 반환
}
return 0;
}
'C & CPP > STL(Standart Template Library' 카테고리의 다른 글
[CPP/STL] vector로 2차원배열 사용하기 (0) | 2021.04.19 |
---|