可以使用以下代码创建两个priority_queue,一个是从大到小排序,另一个是从小到大排序:
#include
#include
#include
using namespace std;
int main() {
int arr[] = {3, 5, 1, 10, 4};
int size = sizeof(arr) / sizeof(int);
auto cmp1 = [](int a, int b) { return a < b; };
priority_queue, decltype(cmp1)> pq1(cmp1);
for (int i = 0; i < size; i++) {
pq1.push(arr[i]);
}
auto cmp2 = [](int a, int b) { return a > b; };
priority_queue, decltype(cmp2)> pq2(cmp2);
for (int i = 0; i < size; i++) {
pq2.push(arr[i]);
}
while (!pq1.empty()) {
cout << pq1.top() << " ";
pq1.pop();
}
cout << endl;
while (!pq2.empty()) {
cout << pq2.top() << " ";
pq2.pop();
}
cout << endl;
return 0;
}
首先定义lambda表达式cmp1,用于从小到大排序,然后定义priority_queue pq1,第一个参数是元素类型,第二个参数是容器类型,第三个参数是比较函数类型,其中decltype(cmp1)用于获取cmp1的类型,注意要在priority_queue后面加上小括号,并将cmp1作为参数传递给它。
然后按照正常的方法将元素加入pq1中。
同样的,使用另一个lambda表达式cmp2,用于从大到小排序,然后定义priority_queue pq2,其余部分与pq1相同。
最后,分别输出pq1和pq2的元素即可。