当我编写代码时,我对仿函数的使用感到困惑。
如果我想按降序对整数序列进行排序,我必须输入 greater<int>
在sort
的第三个参数中,例如sort(v.begin(), v.end(), greater<int>());
.
但是在处理priority_queue
时,我必须输入less<int>
在第三个参数中获取最大顶堆,例如priority_queue< int, vector <int>, less<int> > heap;
.
所以我的问题是,为什么我们使用两个不同的仿函数得到相同的升序关系?
谁能解释一下为什么会发生这种情况? 最好用STL实现的源代码来让我清楚。
为我糟糕的英语道歉。
非常感谢!
最佳答案
默认的sort
按升序顺序排序,使用“小于”作为比较元素的严格弱排序。默认的 priority_queue
保证顶部元素是最大元素(即它按降序顺序“排序”),再次使用“小于” "作为比较元素的严格弱排序。如果您想反转语义,在这两种情况下,您都可以使用“大于”而不是默认的“小于”,作为严格的弱排序。
关于c++ - 关于STL仿函数的使用,更大的<T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18557282/