C++优先级队列不排序

C++ priority queue does not sort

本文关键字:排序 队列 优先级 C++      更新时间:2023-10-16

我试图用自定义的class and Compare结构在C++中实现一个优先级队列,但每当我推送一个新元素时,队列都不会自行排序。

标题中:

private:
    std::priority_queue<Node*, std::vector<Node*>, NodeCompare> queue;

结构:

struct NodeCompare
{
    bool operator()(Node* n1, Node* n2) 
    {
        int val1 = n1->getValue();
        int val2 = n2->getValue();
        return val1 < val2;
    }
};

同类:

Node* node = new Node(nrInTree, value);
queue.push_back(node);

有什么想法吗?

您的代码是正确的。但我认为你有一个误解。因为priority_queue是使用数据结构堆实现的。正如我们所知,堆是不排序的。它只具有最大元素在前面。每次在堆中插入元素时,堆都会使用O(lgN)是时候把最大值推到前面了。每次你弹出一个元素,就会得到最大的元素。但堆根本并没有排序。