2

当我写代码时,我对仿函数的使用感到困惑。

如果我想按降序对整数序列进行排序,我必须greater<int>输入 的第三个参数sort,例如sort(v.begin(), v.end(), greater<int>());.

但是在处理 时priority_queue,我必须less<int>输入第三个参数以获得最大顶堆,例如priority_queue< int, vector <int>, less<int> > heap;.

所以我的问题是为什么我们使用两个不同的函子得到相同的升序关系?

谁能解释为什么会这样?最好使用 STL 实现的源代码让我清楚。

为我糟糕的英语道歉。

非常感谢!

4

1 回答 1

5

默认sort升序排序,使用“小于”作为比较元素的严格弱排序。默认priority_queue保证顶部元素是最大的元素(即它按降序“排序” ),再次使用“小于”作为比较元素的严格弱排序。如果要反转语义,在这两种情况下,都可以使用“大于”而不是默认的“小于”,作为严格的弱排序。

于 2013-09-01T10:12:02.857 回答