我定义了priority_queue<pair<double, int>>
。较小的double值具有较高的优先级。如果队列中有多个相同的double值,则随机弹出一个。例如:(<0.1, 1>, <0.1,2>, <0.1, 0>,<0.1,5>)
,如何随机弹出其中一个?我不确定我的想法是否合理。因为元素的位置已经确定,所以当它被推入队列时。
答案 0 :(得分:2)
如果&#34;随机&#34;你的意思是它应该在double
的最低值的所有项目中执行真实(伪)随机选择,那么std::priority_queue
不能为你做什么 - 它不是为此而设计的。您最好的选择是在优先级相同的情况下弹出并保存所有项目,然后随机选择一个并将其余部分重新插入队列。
另一方面,如果你的意思是&#34;随机&#34;就像在&#34;其中任何一个都是好的,&#34;那么您可以使用自定义比较器来执行此操作,该比较器仅考虑该对的first
数据成员的值。当这些同意将取决于优先级队列的内部实现(以及可能还有插入顺序)时,哪一个被弹出。出于许多目的,这可能是随机的&#34;够了。
在代码中,第二个选项如下所示:
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;
答案 1 :(得分:2)
您可以存储元组double, int, int
,其中最后一个术语是比较器将用于解析等效元素比较的唯一随机数。