【发布时间】:2016-05-31 10:19:09
【问题描述】:
我正在使用 std::priority_queue 编写一个算法来计算 3D 网格上数据集的距离函数。初始化队列后,我想将最后一个元素存储在一个单独的变量中,就像你对 std::queue.back() 所做的那样,但是,当然,这对于优先级队列是不可能的,所以我的解决方法如下:
CellQueue q; //this is the actual priority_queue
//...
//initialization
//...
Cell* last = 0;
CellQueue dummy(q);
while (!dummy.empty()) {
last = dummy.top();
dummy.pop();
}
当然有更好的方法来解决这个问题,所以如果有人能告诉我,我会很高兴的。
谢谢,
费德里科
编辑
@Sam @Dietmar 计算距离函数 (DF) 的算法以这种方式工作:使用至少包含数据集一个点的网格单元填充 priority_queue,然后按距离对它们进行排序 (在这一步为零)按递增顺序排列。然后,对于队列的每个元素,您访问邻居并为每个邻居计算相对于其父元素的距离。现在,出于效率原因,我只想在数据集周围的窄带上计算 DF。因此,为了在访问了第三环邻域后停止这个过程,我必须跟踪当前环的最后一个元素。
【问题讨论】:
-
用所需功能扩展实现怎么样?
-
这是XY problem。你想解决什么问题?不,不是将最后一个元素单独存储在优先级队列中,而是您要解决的真正问题是您认为将最后一个元素存储在优先级队列中是解决方案。
-
获取优先级队列中最后一个元素的目的是什么?如果这实际上是您感兴趣的元素,您可能希望以相反的方式订购优先级队列,它将成为
top()元素。 -
pop_back从优先级队列中弹出最后一项。
标签: c++ queue priority-queue