TIL
[cpp] priority_queue Custom Comparator
hio9_9
2022. 11. 21. 13:55
[priority_queue]
template<
class T,
class Container = std::vector<T>,
class Compare = std::less<typename Container::value_type>
> class priority_queue;
// priority_queue 정의
priority_queue<int> basic_Q; // 오름차순, default
priority_queue<int, vector<int>, less<int>> asce_Q; // 오름차순
priority_queue<int, vector<int>, greater<int>> desc_Q; // 내림차순
[comparator 커스텀]
1. 함수 구현
typedef pair<int, int> pairInt;
bool my_cmp(pairInt &a, pairInt &b) {
return a.first < b.first; // less, 오름차순
}
int main() {
// 1. 함수 포인터 이용
priority_queue<pairInt, vector<pairInt>, bool(*)(pairInt, pairInt)> PQ_1(my_cmp);
// 2. decltype 이용
priority_queue<pairInt, vector<pairInt>, decltype(&my_cmp)> PQ_2(my_cmp);
}
2. 람다식 활용
typedef pair<int, int> pairInt;
int main() {
auto my_cmp = [](pairInt &a, pairInt &b) -> bool {
return a.first < b.first; // less, 오름차순
};
// 1. 함수 포인터 이용
priority_queue<pairInt, vector<pairInt>, bool(*)(pairInt, pairInt)> PQ_1(my_cmp);
// 2. decltype 이용
priority_queue<pairInt, vector<pairInt>, decltype(&my_cmp)> PQ_2(my_cmp);
}
3. 구조체 활용1, cmp 구조체
typedef pair<int, int> pairInt;
struct my_cmp {
bool operator() (pairInt &a, pairInt &b) {
return a.first < b.first; // less, 오름차순
}
};
int main() {
priority_queue<pairInt, vector<pairInt>, my_cmp> PQ;
}
4. 구조체 활용2, 구조체 내부 연산자 오버로딩
struct my_type {
int first, second;
my_type(int _f, int _s) : first(_f), second(_s) {}
bool operator< (const my_type &b) const {
return this->first < b.first; // less, 오름차순
}
};
int main() {
priority_queue<my_type> PQ;
}