c++の優先度付きキューをカスタマイズする方法は?
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
自作の比較関数やクラスを定義することで、カスタムの優先度付きキューの並び替えルールを実現できます。