我在很多代码中都遇到过这个greater<pair<int,int>>
。例如,在下面优先级队列代码的初始化中
priority_queue<pair<int,int>, vector<pair<int,int>>, greater<pair<int,int>>> pq;
我试过很多谷歌搜索,但仍然找不到最好的答案。
发布于 2022-03-10 19:16:01
这是std::greater
类型。
这是一个函数对象类型,它使用>
运算符进行比较。粗略的实现如下所示:
template<typename T>
struct greater {
constexpr auto operator()(T const& a, T const& b) const -> bool {
return a > b; // greater operator
}
};
在您的示例中,使用std::pair
的operator >
将priority_queue
中的std::pair
从“最小”排序为“最大”。
发布于 2022-09-04 14:49:17
greater是一个模板函数对象,定义为:
template<typename T> struct greater {
constexpr bool operator()(T const& a, T const& b) const {
return a > b; // greater operator
}
};
现在,defined >‘>操作符被定义为std::pair
template <class T1, class T2>
bool operator> (const pair<T1,T2>& lhs, const pair<T1,T2>& rhs) { return rhs<lhs; }
现在,“<”运算符被定义为-
template <class T1, class T2>
bool operator< (const pair<T1,T2>& lhs, const pair<T1,T2>& rhs)
{ return lhs.first<rhs.first || (!(rhs.first<lhs.first) && lhs.second<rhs.second); }
因此,有效的,函数greater>的工作方式是-
template<typename T> struct greater {
constexpr bool operator()(T const& a, T const& b) const {
return a.first>b.first || ( (a.first<b.first) && (a.second>b.second));
}
};
即,greater>(a,b)返回真当且仅当a的“第一”参数大于b,或者“第一”参数等于a的“第二”参数大于b,这是严格弱序。
https://stackoverflow.com/questions/71429544
复制相似问题