比較のためにこの方法を使用することについて話しているこのスレッドを調べました。
struct thing
{
int a;
char b;
bool operator<(const thing &o) const
{
return a < o.a;
}
};
priority_queue<thing> pq;
一方、他の人は次のような方法を使用します:
struct Time {
int h;
int m;
int s;
};
class CompareTime {
public:
bool operator()(Time& t1, Time& t2) // Returns true if t1 is earlier than t2
{
if (t1.h < t2.h) return true;
if (t1.h == t2.h && t1.m < t2.m) return true;
if (t1.h == t2.h && t1.m == t2.m && t1.s < t2.s) return true;
return false;
}
}
priority_queue<Time, vector<Time>, CompareTime> pq;
私は最初の方法で自分自身を論理的に考えていますが、2番目の方法を理解することをやめません. ほとんどの場合、構文が原因です。operator()
オーバーロード演算子が何を意味するのかよくわかりません。その演算子のオーバーロードは何ですか?
また、 priority_queue のcplusplusから、次の、主に 2 番目のパラメーターがよくわかりません。
template < class T, class Container = vector<T>,
class Compare = less<typename Container::value_type> > class priority_queue;
つまり、2 番目のメソッドとその呼び出し規約がわかりません。
また、どのような違いがあり、どの方法が好まれますか?