如何比较priority_queue中的两个元素
how to compare two elements in priority_queue
我定义了priority_queue<pair<double, int>>
。双精度值越小优先级越高。如果队列中有几个相同的双精度值,那么随机弹出一个。例如:(<0.1, 1>, <0.1,2>, <0.1, 0>,<0.1,5>)
,如何随机弹出其中一个?我不敢肯定我的想法是否合理。因为元素的位置已经确定,当它被推入队列时
您可以存储元组double, int, int
,其中最后一项是比较器将用于解析等效元素比较的唯一随机数。
如果"随机"是指它应该在所有具有最低double
值的项目中执行真正的(伪)随机选择,那么std::priority_queue
就不能为您做这件事;它不是为此而设计的。你最好的办法是在优先级相同的情况下弹出并保存所有项目,然后随机选择一个,并将其余的重新插入队列。
另一方面,如果您的意思是"随机",即"它们中的任何一个都是好的",那么您可以简单地使用自定义比较器来实现这一点,该比较器将只考虑对的first
数据成员的值。当它们一致时,哪一个被弹出将取决于优先级队列的内部实现(也可能取决于插入顺序)。对于许多用途,这可能足够"随机"。
struct DoublePriority
{
bool operator() (const std::pair<double, int> &lhs, const std:pair<double, int> &rhs) const {
return lhs.first > rhs.first;
}
};
std::priority_queue<std::pair<double, int>, std::vector<std::pair<double, int>>, DoublePriority> theQueue;
相关文章:
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 高级选择排序 - 在一次迭代中搜索两个元素
- 如何仅考虑 *指针中的前两个元素
- 为什么具有两个元素的发起器语法将一个元素而不是两个元素放入字符串向量中?
- 是否可以交换在 c++ 中作为函数 func(say) 中的参数传递的 const 向量的两个元素,例如:vector<int>func (const vector<int>&
- C++ std::向量插入两个元素替代算法失败
- 数组中两个元素的最大异或
- 我无法将二维数组的两个元素的差异分配给C++中其他数组的元素?
- 一个数组可以划分的最大子数组,使得不同子数组中任意两个元素的 GCD 始终为 1?
- 找到两个相关索引,其中两个元素等于目标值
- C++ - 前两个元素之间的差异
- C :交换两个不同向量的两个元素
- C 查找两个元素中出现的次数的数量
- 如何连接向量的两个元素
- 使用STL仅对两个元素进行排序
- 使用STL交换静态数组中的两个元素
- OpenGL:在两个元素之间画一条线
- C++矢量迭代器:比较和擦除两个元素
- 试图将字符串的两个元素组合在一起会得到错误的结果(c++)
- 由 8 个或更多位置分隔的数组中两个元素的最大乘积