C에서 std::sort에는 엄격한 약한 순서 규칙을 준수하는 비교 함수가 필요합니다. 이 규칙은 왼쪽 피연산자가 오른쪽 피연산자보다 작은 경우에만 비교 함수가 true를 반환하도록 보장합니다.
제공된 코드를 고려하세요.
#includestruct 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인 경우에만 두 요소가 동일한 것으로 간주된다는 엄격한 약한 순서 규칙을 위반합니다.
비교를 < other.a의 경우 a가 other.a보다 엄격하게 작은 경우에만 true를 반환하므로 규칙이 충족됩니다. 엄격한 순서를 사용하면 동일한 요소를 만날 때 알고리즘이 무한 루프에 들어가는 것을 방지할 수 있습니다.
결론적으로, std::sort는 연산자가 아닌 것과 충돌합니다< 비교 함수는 엄격한 약한 순서 규칙을 위반하여 잠재적으로 무한 루프가 발생할 수 있기 때문입니다. 따라서 예기치 않은 동작을 방지하려면 비교 기능이 이 규칙을 준수하는지 확인하는 것이 중요합니다.
위 내용은 엄격하지 않은 약한 순서 비교 기능을 사용할 때 `std::sort`가 충돌하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!