📜  C++中的std :: greater以及示例(1)

📅  最后修改于: 2023-12-03 15:14:02.861000             🧑  作者: Mango

C++中的std::greater以及示例

在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::sortstd::greater还可用于其他STL算法中,例如:

  • std::max_elementstd::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的排序和查找函数中,特别适用于基本类型。