相同的代码,如果 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
不保证排序稳定性。如果您需要排序稳定性,则必须自己提供,例如通过存储在主比较键相等时使用的逐渐增加或减少的值(哪个并不重要,它只是改变回退比较的方向),并在您从队列中弹出时将其剥离。
聪明人
我的问题是这样的:
我需要使用 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
不保证排序稳定性。如果您需要排序稳定性,则必须自己提供,例如通过存储在主比较键相等时使用的逐渐增加或减少的值(哪个并不重要,它只是改变回退比较的方向),并在您从队列中弹出时将其剥离。