stl优先级队列首先基于较低的值

时间:2010-05-17 17:44:54

标签: c++ stl

我有stl优先级队列的问题。我希望优先级队列在增加 顺序,默认情况下正在减少。有任何方法可以在优先级队列中执行此操作。

构建stl优先级队列的复杂性是什么。如果我在一个数组中使用快速排序,其中采用O(nlgn),其复杂性类似于使用优先级队列???

Plz someone ans.Advanced thanx。

6 个答案:

答案 0 :(得分:27)

  1. priority_queue具有模板参数,用于指定容器类型和用于排序的比较。默认情况下,比较为less<T>;要获得相反的顺序,请使用priority_queue<T, vector<T>, greater<T>>

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

答案 1 :(得分:8)

使用类型

priority_queue<T, vector<T>, greater<T> >

答案 2 :(得分:1)

使用其他比较器作为std::priority_queue的第3个模板参数。

priority_queue是一个容器适配器,适用于您定义的任何序列。插入的性能等于std::push_heap操作并且需要对数时间。因此,在完成所有插入后进行排序的复杂性并不相同。如果您插入固定金额并在之后处理队列,则vector和单sort可能会更有效率。

答案 3 :(得分:1)

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

答案 4 :(得分:1)

您可以使用比较器类/结构在优先级队列中实现相同的功能。

class CompareHeight 
{ 
    public:
        bool operator()(int &p1, int &p2) 
        {
            return p1 > p2; 
        } 
};

现在将优先级队列声明为

priority_queue<int, vector<int>, CompareHeight> pq;

答案 5 :(得分:0)

用变量类型替换 T 波纹管。您将完成工作

priority_queue<T, vector<T>, greater<T> > PQ;

作为 int 类型变量的示例,您可以这样编写:

priority_queue<int, vector<int>, greater<int> > Q;