std::greater<T>
时间: 2025-06-22 08:48:21 浏览: 13
### C++ 中 `std::greater<T>` 的功能和用法
#### 功能描述
`std::greater<T>` 是一个二元谓词,用于比较两个对象并返回布尔值。当第一个参数大于第二个参数时返回 `true`;否则返回 `false`。此模板类定义于头文件 `<functional>` 中[^1]。
#### 使用场景
通常情况下,在需要自定义排序顺序的地方会使用到 `std::greater<T>`,比如容器中的元素按降序排列或是优先队列中最大值优先出栈等情形下非常有用[^2]。
#### 基本语法结构
```cpp
template< class T = void >
struct greater {
constexpr bool operator()( const T& lhs, const T& rhs ) const;
};
```
- 对于非void类型的T,默认实现通过调用内置操作符">"来完成比较工作。
- 如果指定了void作为类型参数,则该泛型版本可以接受任何具有重载 ">" 运算符的对象进行比较[^3]。
#### 实际应用案例
下面给出几个具体的例子展示如何利用 `std::greater<T>` 来改变默认升序行为:
##### 排序算法示例
```cpp
#include <algorithm>
#include <vector>
#include <iostream>
int main(){
std::vector<int> vec{5, 7, 4, 2, 8};
// 默认从小到大排序
sort(vec.begin(), vec.end());
// 改变排序方式为从大到小
sort(vec.begin(), vec.end(), std::greater<int>());
for(auto i : vec){
std::cout << i << ' ';
}
}
// 输出结果:8 7 5 4 2
```
##### 优先级队列入门指南
```cpp
#include <queue>
#include <iostream>
int main(){
// 创建一个基于向量的最大堆(即每次取出最大的数)
std::priority_queue<int,std::vector<int>,std::less<int>> maxHeap;
// 或者创建最小堆
std::priority_queue<int,std::vector<int>,std::greater<int>> minHeap;
// 向堆里加入一些数值...
minHeap.push(10);
minHeap.push(20);
while(!minHeap.empty()){
std::cout<<minHeap.top()<<" ";
minHeap.pop();
}
return 0;
}
// 输出结果:10 20 (对于最小堆而言)
```
阅读全文
相关推荐



















