首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >greater<pair<int,int>>实际上是做什么的?

greater<pair<int,int>>实际上是做什么的?
EN

Stack Overflow用户
提问于 2022-03-10 19:10:06
回答 2查看 864关注 0票数 2

我在很多代码中都遇到过这个greater<pair<int,int>>。例如,在下面优先级队列代码的初始化中

代码语言:javascript
运行
复制
priority_queue<pair<int,int>, vector<pair<int,int>>, greater<pair<int,int>>> pq;

我试过很多谷歌搜索,但仍然找不到最好的答案。

EN

回答 2

Stack Overflow用户

发布于 2022-03-10 19:16:01

这是std::greater类型。

这是一个函数对象类型,它使用>运算符进行比较。粗略的实现如下所示:

代码语言:javascript
运行
复制
template<typename T>
struct greater {
    constexpr auto operator()(T const& a, T const& b) const -> bool {
        return a > b; // greater operator
    }
};

在您的示例中,使用std::pairoperator >priority_queue中的std::pair从“最小”排序为“最大”。

票数 2
EN

Stack Overflow用户

发布于 2022-09-04 14:49:17

greater是一个模板函数对象,定义为:

代码语言:javascript
运行
复制
template<typename T> struct greater {
    constexpr bool operator()(T const& a, T const& b) const {
        return a > b; // greater operator
    }
};

现在,defined >‘>操作符被定义为std::pair

代码语言:javascript
运行
复制
template <class T1, class T2>
  bool operator>  (const pair<T1,T2>& lhs, const pair<T1,T2>& rhs)    { return rhs<lhs; }

现在,“<”运算符被定义为-

代码语言:javascript
运行
复制
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>的工作方式是-

代码语言:javascript
运行
复制
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,这是严格弱序

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71429544

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档