📅  最后修改于: 2023-12-03 15:14:02.861000             🧑  作者: Mango
在C++中,std::greater
是一个函数对象,用于比较两个值的大小并返回一个bool类型的结果。当第一个值大于第二个值时,std::greater
返回true
,否则返回false
。
下面是std::greater
的函数原型:
template<typename T>
struct greater {
bool operator()(const T& x, const T& y) const;
};
std::greater
可以用于STL的排序函数中,例如std::sort
:
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> v {5, 2, 9, 1, 7};
std::sort(v.begin(), v.end(), std::greater<int>());
for (int i : v) {
std::cout << i << " ";
}
std::cout << std::endl;
return 0;
}
上述代码使用std::greater<int>
比较两个整数类型的值,并将它们以降序排列。
除了std::sort
,std::greater
还可用于其他STL算法中,例如:
std::max_element
和std::min_element
,用于查找容器中的最大值和最小值;std::nth_element
,用于查找容器中的第n大元素。下面是一个使用std::nth_element
的例子:
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> v {5, 2, 9, 1, 7};
std::nth_element(v.begin(), v.begin() + 2, v.end(), std::greater<int>());
std::cout << "The third largest element is: " << v[2] << std::endl;
return 0;
}
上述代码使用std::greater<int>
比较两个整数类型的值,并查找容器中的第三大元素。
值得注意的是,std::greater
只能用于有严格弱序关系的类型(即可以使用'>'操作符比较大小),因为std::greater
只能比较两个相同类型的值。
另外,std::greater
也只适用于基本类型,并不适合比较自定义类型的值。因为自定义类型的值可能不能用'>'操作符比较大小。
总结:std::greater
是一个函数对象,用于比较两个值的大小并返回bool类型结果。它广泛用于STL的排序和查找函数中,特别适用于基本类型。