我正在学习在标准库中使用priority_queue
容器和sort()
函数,并对priority_queue
和sort()
函数的比较函数的参数感到困惑
对于sort()
函数,我的比较函数:第一个参数<第二个参数将从最小到最大排序。 就像下面的代码
对于priority_queue
容器,我的比较函数:first arguemnt>第二个参数将元素从最小到最大排序。 就像下面的代码
是什么导致了差异?
这是我使用std::priority_queue
的代码:
#include <functional>
#include <queue>
#include <vector>
#include <iostream>
using namespace std;
struct Compare {
bool operator() (int left, int right) {
//here is left>right .......... (1)
return(left>right);
}
};
template<typename T>
void print_queue(T& q) {
while(!q.empty()) {
std::cout << q.top() << " ";
q.pop();
}
std::cout << '\n';
}
int main() {
std::priority_queue<int,vector<int>,Compare> q;
for(int n : {1,8,5,6,3,4,0,9,7,2})
q.push(n);
print_queue(q);
}
输出:
0 1 2 3 4 5 6 7 8 9
这是我使用sort()
的代码:
#include<bits/stdc++.h>
using namespace std;
bool compare(int i1, int i2)
{ //here is i1<i2 .............(2)
return (i1 < i2);
}
int main()
{
int arr[] = { 6,2,1,5,8,4};
int n = sizeof(arr)/sizeof(arr[0]);
sort(arr, arr+n, compare);
cout << "Intervals sorted by start time : \n";
for (int i=0; i<n; i++)
cout << arr[i]<<",";
return 0;
}
输出:
1,2,4,5,6,8
答案 0 :(得分:3)
简短的回答是c ++标准这样说:
所以你需要反转比较以获得相同的结果。
为什么选择std :: priority_queue来暴露更大的元素,我不知道,但我怀疑它是受Knuth第5.2.3节的启发。 (D. E. Knuth,计算机程序设计的艺术。第3卷:排序和搜索。)如good old Stl SGI
的注释中所述。