首页 >后端开发 >C++ >为什么使用非严格弱排序比较函数时 `std::sort` 会崩溃?

为什么使用非严格弱排序比较函数时 `std::sort` 会崩溃?

DDD
DDD原创
2024-12-18 13:57:11905浏览

Why Does `std::sort` Crash When Using a Non-Strict Weak Ordering Comparison Function?

为什么 std::sort 使用非操作符会崩溃

比较函数?在 C 中,std::sort 需要一个遵守

严格弱排序

规则的比较函数。此规则确保当且仅当左操作数小于右操作数时比较函数返回 true。

#include <algorithm>

struct A {
  A() : a() {}

  bool operator<(const A& other) const {
    return a <= other.a;
  }

  int a;
};

int main() {
  A coll[8];
  std::sort(&coll[0], &coll[8]); // Crash!!!
}
考虑提供的代码:

自定义比较函数返回 < ;= other.a 对于相等的情况。这违反了严格的弱排序规则,因为它规定当且仅当 a == other.a.

通过将比较更改为 a < 时,两个元素被视为相等。 other.a,满足该规则,因为仅当 a 严格小于 other.a 时它才返回 true。使用严格的排序可以防止算法在遇到相等元素时进入无限循环。

总之,std::sort 因非运算符比较函数,因为该函数违反了严格的弱排序规则,可能导致无限循环。因此,确保您的比较函数遵守此规则以避免意外行为至关重要。

以上是为什么使用非严格弱排序比较函数时 `std::sort` 会崩溃?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn