当我写代码的时候,我被函数器的用法弄糊涂了。
如果我想对一个整数序列进行降序排序,我必须在sort
的第三个参数中放入greater<int>
,例如sort(v.begin(), v.end(), greater<int>());
。
但在处理priority_queue
时,我必须将less<int>
放在第三个参数中,以获得最大顶层堆,例如priority_queue< int, vector <int>, less<int> > heap;
。
所以我的问题是,为什么我们使用两个不同的函数器得到相同的升序关系?
有人能解释一下为什么会发生这种情况吗?最好使用STL实现中的源代码来让我更清楚。
为我糟糕的英语道歉。
非常感谢!
发布于 2013-09-01 18:12:03
默认的sort
以小于升序排序,使用“-”作为比较元素的严格弱排序。默认的priority_queue
保证顶部元素是最大的元素(即,它以小于降序的顺序“排序”),同样使用“-”作为比较元素的严格弱排序。如果你想颠倒语义,在这两种情况下,你可以使用“大于”而不是默认的“小于”,作为严格的弱排序。
https://stackoverflow.com/questions/18557282
复制相似问题