私は C++ でプログラムを書いており、自分のクラスの 1 つの優先キューを定義したいと考えています。クラスメンバー変数の1つでオブジェクトを比較するために必要です。operator< オーバーロードを使用しましたが、この目標を達成するための 2 番目の方法があることを知っています - キュー定義で定義された特別な関数です。どちらの方法がより良く、より審美的で、より効率的ですか? そして、そのような関数をどのように書くのですか?
私は次のようにしました:
#include <iostream>
#include <queue>
using namespace std;
class Human {
public:
string name;
int age;
Human(string name, int age);
};
Human::Human(string name, int age) : name(name), age(age) {}
bool operator<(Human a, Human b) {return a.age < b.age ? true : false;}
int main() {
Human p1("Child",5);
Human p2("Grandfather",70);
Human p3("Older son",20);
Human p4("Father",40);
Human p5("Younger son",10);
priority_queue<Human> Q;
Q.push(p1);
Q.push(p2);
Q.push(p3);
Q.push(p4);
Q.push(p5);
while(!Q.empty()) {
cout << "Name: " << Q.top().name << ", age: " << Q.top().age << endl;
Q.pop();
}
return 0;
}