当我编写代码时,我对仿函数的使用感到困惑。
如果我想按降序对整数序列进行排序,我必须将greater<int>
放在sort
的第三个参数中,例如sort(v.begin(), v.end(), greater<int>());
。
但在处理priority_queue
时,我必须将less<int>
放在第三个参数中以获得最大顶级堆,例如priority_queue< int, vector <int>, less<int> > heap;
。
所以我的问题是为什么我们使用两个不同的函子获得相同的提升关系?
有人可以解释为什么会这样吗? 更好地使用STL实现的源代码让我清楚。
为我可怜的英语道歉。
非常感谢!
答案 0 :(得分:5)
默认sort
按升序顺序排序,使用“less-than”作为比较元素的严格弱排序。默认priority_queue
保证顶部元素是最大一个(即它以降序顺序“排序”),再次使用“less-than”作为比较元素的严格弱序。如果你想颠倒语义,在这两种情况下,你都可以使用“更大”而不是默认的“小于”,作为严格的弱排序。