比较函数?在 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中文网其他相关文章!