问题描述
我有std::priotity_queue
是使用自定义比较功能实现的。测试时,我遇到了奇怪的行为。我插入第一个元素,然后插入第二个元素,在运行比较后,该元素应该位于第一个元素之前,这确实意味着比较功能可以按预期工作。当插入第三个元素时,该元素现在也应该到达队列的顶部,在std::priority_queue.push()
返回之后,而不是看起来像这样的队列:third-second-first;看起来像是:第三秒。
看一下调试器,我看到在运行比较之前,新元素首先添加到队列的末尾。而且由于比较之后第二个添加的元素在队列末尾结束,这意味着第三个添加的元素而不是在第二个插入的元素之前被插入,而是与其交换了。
知道为什么会这样吗?我认为这不是预期的行为。预先感谢!
编辑:这是相关的代码段:
struct Position {
int turns;
int cabin;
int index;
static bool comparePosition(Position const left,Position const right) {
if (left.turns != right.turns)
return left.turns > right.turns;
else
return left.cabin > right.cabin;
}
};
Position order(std::vector<int> const &c,int const n,int const p) {
std::priority_queue<Position,std::vector<Position>,decltype(&Position::comparePosition)> queue(
Position::comparePosition);
int cabina = 1;
for (int i = 0; i < c.size(); i++) {
if (cabina <= n) {
queue.push(Position{c[i],cabina,i});
cabina++;
} else {
Position out = queue.top();
cout << out.index + 1 << ' ';
queue.pop();
queue.push(Position{c[i],out.cabin,i});
}
}
Position out{};
while (!queue.empty()) {
out = queue.top();
queue.pop();
cout << out.index << ' ';
}
return out;
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)