方法1 operator<()を実装する
以下の例のように、MyClass::operator<()を実装すればOK。
#include <iostream>
#include <queue>
class MyClass {
public:
MyClass(int num) :
num_(num)
{}
std::string toString() const {
return std::to_string(num_);
}
bool operator<(const MyClass& rhs) const {
return num_ > rhs.num_;
}
private:
int num_;
};
int main() {
std::priority_queue<MyClass> que;
que.push(MyClass(3));
que.push(MyClass(1));
que.push(MyClass(2));
std::cout << que.top().toString() << std::endl;
que.pop();
std::cout << que.top().toString() << std::endl;
que.pop();
std::cout << que.top().toString() << std::endl;
que.pop();
return 0;
}
方法2 比較用の型を追加する
自作の型を比較する型(以下の例だと、MyClass::Compare)を追加して、それをstd::priority_queueに渡せばOK。
#include <iostream>
#include <queue>
class MyClass {
public:
MyClass(int num) :
num_(num)
{}
std::string toString() const {
return std::to_string(num_);
}
struct Compare {
bool operator()(const MyClass& a, const MyClass& b) const {
return a.num_ > b.num_;
}
};
private:
int num_;
};
int main() {
std::priority_queue<MyClass, std::vector<MyClass>, MyClass::Compare> que;
que.push(MyClass(3));
que.push(MyClass(1));
que.push(MyClass(2));
std::cout << que.top().toString() << std::endl;
que.pop();
std::cout << que.top().toString() << std::endl;
que.pop();
std::cout << que.top().toString() << std::endl;
que.pop();
return 0;
}
実行結果
1
2
3
参考
https://cpprefjp.github.io/reference/queue/priority_queue.html