具有结构的C++优先级队列
C++ Priority Queue with Struct
我正在使用带有Struct 的优先级队列
我的结构是下面的节点:
struct Node{
int level;
int bound;
int total;};
我的优先级队列如下:
std::priority_queue<Node> pq;
我想做的是将优先级队列(pq)排序为Node.bound的值,以便bound值最大的Node对象位于优先级队列的顶部。
我发现我必须重载方法"操作员"
所以我在下面做了
bool operator<(Node const& lhs, Node const& rhs) {
return lhs.bound < rhs.bound;}
在我重载该方法后,pq对节点对象进行了排序,但通常有一些例外,即271268267261,268,249,<strong]255>、260,246256271是pq的最高值。
我该怎么办才能解决这种情况?我想如果我解决了这个问题,我就能完美地解决我的问题!
优先级队列将顶部元素(即将弹出的元素)保留为第一个元素。其他元素按未指定的顺序排列。
我打赌默认的实现是在封面下面使用堆结构,以使其尽可能高效。这就是为什么元素看起来是随机的。
请注意,这就是为什么std::priority_queue
接口只允许您访问pop()
元素,而不提供对队列中元素的随机访问。
附加说明:优先级队列的顺序由第三个模板参数定义。如果未对此进行定义,则默认为std::less
,默认情况下将使用operator<
进行比较。
相关文章:
- C++优先级队列,按对象的唯一指针的特定方法升序排列
- 按对象的特定方法按升序排列的C++优先级队列
- 使用2个键的cpp-stl::优先级队列排序不正确
- 为什么我需要C++中不同的排序格式来对这个USACO代码上的数组和优先级队列进行排序
- 打印优先级队列
- 带自定义比较器的最小优先级队列
- 优先级队列自定义比较器
- 排序数组优先级队列
- 更改运行时优先级队列的排序功能
- 优先级队列构造函数的工作
- 实现优先级队列
- 优先级队列功能比较
- 在C++中打印对的优先级队列的所有值时出现问题
- 使用堆的优先级队列,具有相同键的值不遵循 FIFO(先进先出)
- 为什么某些 STL 容器(堆栈、队列、优先级队列)不支持迭代器?
- 是否可以使用简单队列创建优先级队列
- 如何在 c++ 中创建对的优先级队列.这会弹出具有最小值的元素.默认的弹出最大值
- Cython中带有自定义比较器的优先级队列
- 优先级队列比较器[C++].
- asio::io_service 具有多个线程的优先级队列处理