首页 > 后端开发 > C++ > 为什么我的 `std::sort` 崩溃了? (以及如何修复它)

为什么我的 `std::sort` 崩溃了? (以及如何修复它)

Susan Sarandon
发布: 2024-12-14 16:22:14
原创
762 人浏览过

Why Does My `std::sort` Crash?  (And How to Fix It)

了解 std::sort 导致编译器崩溃

C 标准库函数 std::sort 在数据排序中起着至关重要的作用结构。但是,并非所有比较函数都按 std::sort 的预期运行,可能会导致程序崩溃。

考虑以下代码片段:

#include <algorithm>

struct A
{
    int a;
};

bool compare(const A& a, const A& b)
{
    return a.a <= b.a; // Corrected from original code (<)
}

int main()
{
    A coll[8];
    std::sort(&coll[0], &coll[8]);
}
登录后复制

问题:

原代码中,比较函数compare使用a.a 严格弱排序规则。

解决方案:

根据严格弱排序规则,对于任意序列中的元素 A、B 和 C 必须满足以下条件:

  • 如果 A
  • 如果 A
  • B和B< C,则A<0 C.
  • A 不能等于自身(即 A != A)。

原来的比较函数 Compare 不满足这个规则,因为它允许 A 等于本身,导致 std::sort 内潜在的无限循环。要解决此问题,需要将比较函数替换为上面代码片段中显示的更正版本。

以上是为什么我的 `std::sort` 崩溃了? (以及如何修复它)的详细内容。更多信息请关注PHP中文网其他相关文章!

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