V_Vi3w 2021-03-29 09:31 采纳率: 0%
浏览 98

优先队列是按值从大到小排列的,top元素是值最大的。要想让优先队列从小到大排列就要重载运算符函数

优先队列是按值从大到小排列的,top元素是值最大的。要想让优先队列从小到大排列就要重载运算符函数
  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-07-23 20:43
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    #include <queue>
    #include <iostream>
    
    using namespace std;
    
    class Point {
    public:
        int x;
        int y;
        int times;
    
        friend class PriorityQueue;
    };
    
    class PriorityQueue {
    private:
        queue<Point> pq;
    
    public:
        void push(Point p) {
            pq.push(p);
        }
    
        Point pop() {
            return pq.front();
        }
        
        bool empty() const {
            return pq.empty();
        }
    };
    
    void test() {
        PriorityQueue q;
        q.push(Point(3, 4, 5));
        q.push(Point(6, 8, 7));
    
        cout << "Pop: " << q.pop().x << ", " << q.pop().y << endl;
    }
    
    int main() {
        test();
        return 0;
    }
    

    在这个例子中,我们创建了一个PriorityQueue类,它使用一个queue<Point>来存储点,并提供了pushpopempty成员函数来进行添加、弹出和检查是否为空的操作。通过实现operator<,我们可以将点按照时间(即times)从小到大排序。

    这个例子中的代码展示了如何使用operator<来改变对象之间的比较顺序。在C++标准库中,可以使用友元函数或者构造函数等方法来重载不同的比较运算符,从而达到不同的目的。

    评论

报告相同问题?