我尝试使用自定义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);
有什么想法吗?
答案 0 :(得分:2)
您的代码是正确的。但我认为你在这里有误解。 因为priority_queue是使用数据结构堆实现的。 我们知道,堆没有排序。它只具有最大元素的属性 在前面。每次,您将一个元素插入堆中,堆将使用O(lgN) 时间把最大值推到前面。 每次弹出元素时,都会获得最大的元素。 但堆根本没有排序。