c++ priority_queue 自定义比较函数

lambda

auto comp=[](const int& lhs, const int& rhs)
{ 
  return lhs < rhs;
};
std::priority_queue<int, std::vector<int>, decltype(comp)> pq(comp);

struct1

struct Pos
{
    int x, y, h;
    Pos(int x_, int y_, int h_) : x(x_), y(y_), h(h_) {}
    // 这里的两个const是需要的
    bool operator> (const Pos& a) const {
        return h > a.h;
    }
};
// greater 使用 operator>
// less 使用 operator<
std::priority_queue<Pos, std::vector<Pos>, greater<Pos>> pq;

struct2

struct Pos
{
    int x, y, h;
    Pos(int x_, int y_, int h_) : x(x_), y(y_), h(h_) {}
    // 这里的两个const是需要的
    bool operator> (const Pos& a) const {
        return h > a.h;
    }
};
// 不加引用不用加const
bool operator> (const Pos& a, const Pos& b)
{
    return a.h > b.h;
}
// greater 使用 operator>
// less 使用 operator<
std::priority_queue<Pos, std::vector<Pos>, greater<Pos>> pq;

struct3

struct Pos
{
    int x, y, h;
    Pos(int x_, int y_, int h_) : x(x_), y(y_), h(h_) {}
};

struct cmp
{
    // Pos a, Pos& a, const Pos& a, 都可以
    bool operator() (Pos a, Pos b) {
        return a.h > b.h;
    }
};
std::priority_queue<Pos, std::vector<Pos>, cmp> pq;
posted @ 2021-08-31 15:27  miyanyan  阅读(367)  评论(0编辑  收藏  举报