关于 c :相同的代码,如果在 priority_queue 中存在 tie,则顺序不同,使用 clang 和 gcc

same code, different order if tie exists in priority_queue, using clang and gcc

本问题已经有最佳答案,请猛点这里访问。

聪明人

我的问题是这样的:

我需要使用 std 中的 priority_queue,一切正常,直到我的记录之间存在联系,如果我使用 clang 编译与在 gcc 上编译相比,顺序不再一致。

我的比较器功能很简单:

1
2
3
bool comparator(const max_pair_t &lhs, const max_pair_t &rhs) {
    return lhs.pval < rhs.pval;
}

就是这样。

有没有办法解决这个问题?

PS:我用两个二进制可执行文件打印出所有的记录,并排比较顺序,顺序不同,但是绑定的记录在相邻区域


std::priority_queue 不保证排序的稳定性。如果您需要排序稳定性,则必须自己提供,例如通过存储在主比较键相等时使用的逐渐增加或减少的值(并不重要,它只是改变回退比较的方向),并在您弹出队列时将其剥离。