sort与priority_queue
结论
std::sort
- 默认排序:
std::sort
默认使用std::less<T>
,即升序排列。 - 使用
std::greater<T>
:如果使用std::greater<T>
,则进行降序排列。
std::priority_queue
- 默认行为:
std::priority_queue
默认使用std::less<T>
,构建一个最大堆(大根堆)。在最大堆中,优先级最高的元素(即最大的元素)在堆顶。 - 使用
std::greater<T>
:如果使用std::greater<T>
,则构建一个最小堆(小根堆)。在最小堆中,优先级最高的元素(即最小的元素)在堆顶。
代码验证
分别使用默认的sort
,priority_queue
的默认情况,greater
类型进行构造,并打印数据。结果如下
分别是
sort(v.begin(),v.end(),greater<int>);
sort(v.begin(),v.end());
priority_queue<int, std::vector<int>, std::greater<int>> minHeap;
std::priority_queue<int> maxHeap;
代码
#include <iostream>
#include <algorithm> // 包含 std::sort 和 std::greater, std::less
#include <vector>
#include <queue>
#include <functional> // 包含 std::greater 和 std::less
int main() {
std::vector<int> v = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5};
// 使用 std::greater 进行降序排序
std::sort(v.begin(), v.end(), std::greater<int>());
std::cout << "降序排序后的结果: ";
for (int n : v) {
std::cout << n << ' ';
}
std::cout << std::endl;
// 使用 std::less 进行升序排序
std::sort(v.begin(), v.end(), std::less<int>());
std::cout << "升序排序后的结果: ";
for (int n : v) {
std::cout << n << ' ';
}
std::cout << std::endl;
// 使用 std::greater 创建最小堆
std::priority_queue<int, std::vector<int>, std::greater<int>> minHeap;
for (auto i = v.begin(); i != v.end(); ++i) {
minHeap.push(*i);
}
std::cout << "优先队列(最小堆)中的内容: ";
while (!minHeap.empty()) {
std::cout << minHeap.top() << ' ';
minHeap.pop();
}
std::cout << std::endl;
// 使用 std::less 创建最大堆(默认行为)
std::priority_queue<int> maxHeap;
for (auto i = v.begin(); i != v.end(); ++i) {
maxHeap.push(*i);
}
std::cout << "优先队列(最大堆)中的内容: ";
while (!maxHeap.empty()) {
std::cout << maxHeap.top() << ' ';
maxHeap.pop();
}
std::cout << std::endl;
return 0;
}