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

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

聪明人

我的问题是这样的:

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

我的比较器功能很简单:

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

就是这样。

有办法解决这个问题吗?

PS: 我用两个二进制文件打印出所有的记录,并排比较顺序,顺序不一样,但是并列的记录在相邻的区域

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