首页 > 后端开发 > C++ > 当比较函数不是严格的时,为什么 `std::sort` 会崩溃”

当比较函数不是严格的时,为什么 `std::sort` 会崩溃”

Mary-Kate Olsen
发布: 2024-12-29 09:12:15
原创
863 人浏览过

Why Does `std::sort` Crash When the Comparison Function Isn't a Strict

如果比较函数不是严格运算符“

提供的 C 代码片段演示了由于比较函数不正确,在使用 std::sort 时发生崩溃。由于 std::sort 期望排序器满足严格的弱排序规则,因此让我们深入研究该问题及其解决方案。

在代码中,A 结构体的比较函数检查 a 是否小于或等于到 (

严格弱排序

严格弱排序定义的关系为:

  • 非反身: a 不能与自身相关(a ≱ a).
  • 传递:如果a与b相关,并且b与c相关,则a与c相关。
  • 反对称: 如果 a 与 b 相关,b 与 a 相关,则 a 等于 b (a ≈ b).

代码中,比较函数不满足反对称性,即使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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板