sort的第三个参数与priority_queue的第三个模板参数

sort

sort的第三个参数与priority_queue的第三个模板参数_第1张图片

在C++的标准库中,std::sort是一个用于对容器的元素进行排序的算法。它接受三个参数:

1、需要排序的容器的起始迭代器(包含)。
2、需要排序的容器的结束迭代器(不包含)。
3、可选参数,用于指定排序时的比较函数指针比较函数对象(仿函数)
第三个参数允许你自定义排序的方式。它可以是一个指向函数的指针,也可以是一个函数对象。这个比较函数或比较函数对象会在排序过程中被调用,用于决定相邻元素之间的顺序。

比较函数或比较函数对象应该满足以下规则:

如果第一个参数小于第二个参数,升序
如果第一个参数大于等于第二个参数,降序

//函数指针
bool compare(int a, int b) {
    return a < b;  //升序
}

std::vector<int> vec = {3, 1, 4, 1, 5, 9};
std::sort(vec.begin(), vec.end(), compare);

--------------------------------------------------------------
//函数对象(仿函数)
struct Compare {
    bool operator()(int a, int b) {
        return a < b;  //升序
    }
};

std::vector<int> vec = {3, 1, 4, 1, 5, 9};
std::sort(vec.begin(), vec.end(), Compare());

使用库里面的排序类

#include 
#include 
#include 
#include 

int main() {
    std::vector<int> vec = {3, 1, 4, 1, 5, 9};

    // 使用greater进行降序排序
    std::sort(vec.begin(), vec.end(), std::greater<int>());

    // 输出结果
    for (auto i : vec) {
        std::cout << i << " ";
    }
    std::cout << std::endl;

    return 0;
}

greater类的源码

template <typename T>
struct greater 
{
    constexpr bool operator()(const T& lhs, const T& rhs) const 
    {
        return lhs > rhs;
    }
};

priority_queue

在这里插入图片描述

std::priority_queue 模板类的三个模板参数都是类型。具体来说,这三个模板参数分别是:

  1. typename T:指定元素的类型。
  2. typename Container = std::vector:指定基础容器类型,默认值为 std::vector
  3. typename Compare = std::less:指定元素排序方式,默认值为 std::less

其中,第一个模板参数 T 指定了 std::priority_queue 中要存储的元素类型。第二个模板参数 Container 指定了底层容器的类型,可以通过指定不同的容器类型实现不同的堆结构。第三个模板参数 Compare 指定了元素的排序方式和优先级判断方式,可以使用默认值或通过自定义函数对象类来实现。

因此,当你使用 std::priority_queue 时,需要根据实际需求来选择合适的类型,并进行必要的模板参数传递。

#include 

struct MyCompare {
    bool operator()(int a, int b) const {
        return a < b; // 从小到大排序
    }
};

int main() {
	//MyCompare-》类型
    std::priority_queue<int, std::vector<int>, MyCompare> pq;

    pq.push(3);
    pq.push(1);
    pq.push(4);

    int top = pq.top(); // 值为 1

    return 0;
}
#include 
#include 

int main() {
    // 使用 std::priority_queue 存储整数,以最小堆的方式排序元素
    //std::greater-》类型
    std::priority_queue<int, std::vector<int>, std::greater<int>> pq;

    // 添加元素
    pq.push(3);
    pq.push(1);
    pq.push(4);

    // 获取堆顶元素
    int top = pq.top(); // 值为 1

    return 0;
}

你可能感兴趣的:(C++,c++)