C++优先级队列不排序
C++ priority queue does not sort
我试图用自定义的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)是时候把最大值推到前面了。每次你弹出一个元素,就会得到最大的元素。但堆根本并没有排序。
相关文章:
- 使用2个键的cpp-stl::优先级队列排序不正确
- 为什么我需要C++中不同的排序格式来对这个USACO代码上的数组和优先级队列进行排序
- 更改运行时优先级队列的排序功能
- 内存排序在提升::无锁:队列
- 优先级队列未正确排序
- 排序函数和优先级队列 C++ 中的比较器
- 如何检查队列是否使用 STL 排序
- 对字符串队列进行排序
- C++ 中优先级队列的结构排序条件
- 队列快速排序不排序和打印随机字符串[C ]
- 相同的比较功能为C++中的排序和优先级队列提供不同的输出
- 有效地添加到排序的队列中
- 排序结构的队列
- 我如何在队列中排序元素
- 根据此条件对队列进行排序
- 将添加到队列的第一个元素作为 null 进行排序
- 推送到排序队列实现
- 对队列进行排序 - C/C++
- 命令模式队列按时间排序
- 数据结构-排序队列链表c++