c++中为什么priority_queue更大?Result和sort的更大的结果不同吗?

2022-01-30 13:57:29 标签 c++priority-queue

我搜索了类似的内容,但我不明白答案,所以我再问你一次。

vector<int> v;
v.push_back(3);
v.push_back(11);
v.push_back(13);
v.push_back(-1);
v.push_back(-8);
v.push_back(324);
v.push_back(55);
sort(v.begin(),v.end(), greater<int>() );
for(auto i : v)
{
    cout << i << " ";
}

// result按降序排列

priority_queue<int, vector<int>, greater<int>> pq;
pq.push(3);
pq.push(5);
pq.push(4);
pq.push(9);
pq.push(13);
pq.push(15);
while(!pq.empty())
{
    cout << pq.top() << " ";
    pq.pop();
}

// result是升序

greater的执行也在这里

struct greater : public binary_function<_Tp, _Tp, bool>
{
  _GLIBCXX14_CONSTEXPR
  bool
  operator()(const _Tp& __x, const _Tp& __y) const
  { return __x > __y; }
}

x比;Y表示递减,为什么?为什么特别在优先队列中,更大意味着上升?请有人把这个说清楚…谢谢你!

# # #std::priority_queue reference:

参考:

优先队列是一种容器适配器,它提供最大元素(默认情况下)的常量时间查找

(强调我的)

所以使用std::less的默认排序是降序的。通过使用std::greater,你可以逆转这一点。排序。

因为它是这样定义的。前面的答案很好,但我想再强调一下规范的另一部分

请注意,Compare参数的定义使其返回true

如果它的第一个参数在弱函数中的第二个参数之前

排序。但因为优先队列输出最大的元素

首先,“出现在前面”的元素实际上最后输出。那

队列的前面是否包含根据的“最后”元素

Compare强加的弱排序。

所以"greater"的意思是"small first"

阅读全文

▼ 版权说明

相关文章也很精彩
推荐内容
更多标签
相关热门
全站排行
随便看看

错说 cuoshuo.com —— 程序员的报错记录

部分内容根据CC版权协议转载;网站内容仅供参考,生产环境使用务必查阅官方文档

辽ICP备19011660号-5

×

扫码关注公众号:职场神器
发送: 1
获取永久解锁本站全部文章的验证码