class Person
{
public:
int age;
};
Personクラスのオブジェクトを優先キューに保存したい。
priority_queue< Person, vector<Person>, ??? >
比較のためにクラスを定義する必要があると思いますが、よくわかりません。
また、私たちが書くとき、
priority_queue< int, vector<int>, greater<int> >
大きい方はどのように機能しますか?
Person
この場合、キューに格納されているタイプに対して、有効で厳密な弱順序の比較を提供する必要があります。デフォルトでは、を使用しますstd::less<T>
。これは、と同等の値に解決されoperator<
ます。これは、それ自体が格納されているタイプに依存しています。したがって、実装する場合
bool operator<(const Person& lhs, const Person& rhs);
それ以上の変更なしで動作するはずです。実装は次のようになります
bool operator<(const Person& lhs, const Person& rhs)
{
return lhs.age < rhs.age;
}
タイプに自然な「より小さい」比較がない場合は、デフォルトの代わりに独自の述語を提供する方が理にかなっていますstd::less<Person>
。例えば、
struct LessThanByAge
{
bool operator()(const Person& lhs, const Person& rhs) const
{
return lhs.age < rhs.age;
}
};
次に、次のようにキューをインスタンス化します。
std::priority_queue<Person, std::vector<Person>, LessThanByAge> pq;
std::greater<Person>
コンパレータとしての使用に関しては、これはoperator>
、デフォルトの場合と同等の機能を使用し、優先度が反転したWRTでキューを作成する効果があります。operator>
2つのPerson
インスタンスで動作できるの存在が必要になります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加