如果比较函数不是严格运算符“
提供的 C 代码片段演示了由于比较函数不正确,在使用 std::sort 时发生崩溃。由于 std::sort 期望排序器满足严格的弱排序规则,因此让我们深入研究该问题及其解决方案。
在代码中,A 结构体的比较函数检查 a 是否小于或等于到 (
严格弱排序
严格弱排序定义的关系为:
代码中,比较函数不满足反对称性,即使a等于other.a,它也会返回true。这可能会导致 std::sort 中出现不确定性行为,例如无限循环。
解决方案
要解决此问题,应修改比较函数遵守严格的弱排序规则,仅当 a 严格小于 other.a 时才返回 true,如下所示:
struct A { bool operator <(const A& other) const { return a < other.a; // Return true only when a is strictly less than other.a } };
This更正的比较函数确保遵守严格的弱排序规则,使 std::sort 能够按预期运行而不会崩溃。
以上是当比较函数不是严格的时,为什么 `std::sort` 会崩溃”的详细内容。更多信息请关注PHP中文网其他相关文章!