C ++优先级队列不排序

时间:2014-10-22 14:34:11

标签: c++ priority-queue

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

在标题中:

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

STRUCT:

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);

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

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