在C++中,可以使用std::priority_queue
類來實現優先隊列。默認情況下,std::priority_queue
是使用std::less
來進行比較的,即元素的優先級由最大的元素排在隊列前面。如果要自定義優先隊列的排序規則,可以通過使用自定義的比較函數或者自定義的類來實現。
使用自定義的比較函數:
#include <iostream>
#include <queue>
struct CustomCompare {
bool operator()(int a, int b) {
// 自定義排序規則,按照元素的絕對值大小進行排序
return std::abs(a) > std::abs(b);
}
};
int main() {
std::priority_queue<int, std::vector<int>, CustomCompare> pq;
pq.push(3);
pq.push(-5);
pq.push(2);
pq.push(-1);
while (!pq.empty()) {
std::cout << pq.top() << " ";
pq.pop();
}
return 0;
}
輸出結果:
-5 3 -1 2
使用自定義的類:
#include <iostream>
#include <queue>
class MyClass {
public:
int value;
MyClass(int v) : value(v) {}
};
struct CustomCompare {
bool operator()(const MyClass& a, const MyClass& b) {
// 自定義排序規則,按照元素的value進行排序
return a.value > b.value;
}
};
int main() {
std::priority_queue<MyClass, std::vector<MyClass>, CustomCompare> pq;
pq.push(MyClass(3));
pq.push(MyClass(-5));
pq.push(MyClass(2));
pq.push(MyClass(-1));
while (!pq.empty()) {
std::cout << pq.top().value << " ";
pq.pop();
}
return 0;
}
輸出結果:
-5 -1 2 3
通過定義自己的比較函數或類,就可以實現自定義的優先隊列排序規則。