C++ 基于低值优先的stl优先级队列

C++ 基于低值优先的stl优先级队列,c++,stl,C++,Stl,我的stl优先级队列有问题。我希望优先级队列处于递增状态 顺序,默认情况下是递减的。在优先级队列中有什么方法可以做到这一点 class CompareHeight { public: bool operator()(int &p1, int &p2) { return p1 > p2; } }; 构建stl优先级队列的复杂性是什么?如果我在一个数组中使用快速排序,它的复杂性与使用优先

我的stl优先级队列有问题。我希望优先级队列处于递增状态 顺序,默认情况下是递减的。在优先级队列中有什么方法可以做到这一点

class CompareHeight 
{ 
    public:
        bool operator()(int &p1, int &p2) 
        {
            return p1 > p2; 
        } 
};
构建stl优先级队列的复杂性是什么?如果我在一个数组中使用快速排序,它的复杂性与使用优先级队列相似吗


请告诉我有人比我先进

使用不同的比较器作为
std::priority\u queue
的第三个模板参数


priority_queue是一个容器适配器,可以在您定义的任何序列上工作。插入的性能相当于
std::push_heap
操作,需要对数时间。因此,在所有插入完成后进行排序的复杂性并不相同。如果您插入一个固定数量,然后对队列进行处理,
向量
和单个
排序
可能更有效

使用不同的比较器作为
std::priority\u queue
的第三个模板参数

priority_queue是一个容器适配器,可以在您定义的任何序列上工作。插入的性能相当于
std::push_heap
操作,需要对数时间。因此,在所有插入完成后进行排序的复杂性并不相同。如果您插入一个固定数量,然后对队列进行处理,
向量
和单个
排序
可能更有效

使用该类型

priority_queue<T, vector<T>, greater<T> >
优先级队列
使用该类型

priority_queue<T, vector<T>, greater<T> >
优先级队列
  • priority\u queue
    具有指定容器类型和用于订购的比较的模板参数。默认情况下,比较小于;要获得相反的顺序,请使用
    优先级\u队列

  • 插入优先级队列需要对数时间,因此构建
    N
    项的队列具有复杂性
    O(N logN)
    ,与构建和排序向量相同。但一旦构建完成,插入优先级队列仍然是对数的,而插入排序向量是线性的

  • priority\u queue
    具有指定容器类型和用于订购的比较的模板参数。默认情况下,比较小于;要获得相反的顺序,请使用
    优先级\u队列

  • 插入优先级队列需要对数时间,因此构建
    N
    项的队列具有复杂性
    O(N logN)
    ,与构建和排序向量相同。但一旦构建完成,插入优先级队列仍然是对数的,而插入排序向量是线性的


  • 您可以将值乘以-1,这样它将以与实际默认顺序相反的顺序存储…并在检索数据时再次将值乘以-1,以获得其实际形式。

    您可以将值乘以-1,这样它将以与实际默认顺序相反的顺序存储…并且检索数据时,再次将值与-1相乘,以获得其实际形式。

    T替换为变量类型。你会把工作做完的

    priority_queue<T, vector<T>, greater<T> > PQ;
    
    优先级队列PQ;
    
    作为int类型变量的示例,您可以这样编写:

    priority_queue<int, vector<int>, greater<int> > Q;
    
    priority\u队列Q;
    
    T波纹管替换为变量类型。你会把工作做完的

    priority_queue<T, vector<T>, greater<T> > PQ;
    
    优先级队列PQ;
    
    作为int类型变量的示例,您可以这样编写:

    priority_queue<int, vector<int>, greater<int> > Q;
    
    priority\u队列Q;
    
    您可以使用comparator类/struct在优先级队列中实现相同的功能

    class CompareHeight 
    { 
        public:
            bool operator()(int &p1, int &p2) 
            {
                return p1 > p2; 
            } 
    };
    
    现在将优先级队列声明为

    priority_queue<int, vector<int>, CompareHeight> pq;
    
    优先级队列pq;
    
    您可以使用comparator类/struct在优先级队列中实现相同的功能

    class CompareHeight 
    { 
        public:
            bool operator()(int &p1, int &p2) 
            {
                return p1 > p2; 
            } 
    };
    
    现在将优先级队列声明为

    priority_queue<int, vector<int>, CompareHeight> pq;
    
    优先级队列pq;
    
    事实上我是stl的新手。请给我一个优先级队列的例子。就像我使用了优先级队列一样,那么当使用(优先级队列)时,构造函数应该是什么。如果你给出实际的代码,我将非常感激。再次感谢你的帮助。好的,谢谢所有帮助过我的人。我得到了答案。std::优先级队列Q;第二个论点的重点是什么?这难道不能像集合一样,我们只去集合而不去集合吗?事实上我是stl的新手。所以请给我一个优先级队列的例子。就像我使用了优先级队列一样,那么当使用(优先级队列)时,构造函数应该是什么。如果你给出实际的代码,我将非常感激。再次感谢你的帮助。好的,谢谢所有帮助过我的人。我得到了答案。std::优先级队列Q;第二个论点的重点是什么?难道这就不能像一个设定,我们只是去设定而不是设定吗?