> 백엔드 개발 > C++ > 엄격하지 않은 약한 순서 비교 기능을 사용할 때 `std::sort`가 충돌하는 이유는 무엇입니까?

엄격하지 않은 약한 순서 비교 기능을 사용할 때 `std::sort`가 충돌하는 이유는 무엇입니까?

DDD
풀어 주다: 2024-12-18 13:57:11
원래의
904명이 탐색했습니다.

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

std::sort가 연산자가 아닌 경우 충돌이 발생하는 이유< 비교 함수?

C에서 std::sort에는 엄격한 약한 순서 규칙을 준수하는 비교 함수가 필요합니다. 이 규칙은 왼쪽 피연산자가 오른쪽 피연산자보다 작은 경우에만 비교 함수가 true를 반환하도록 보장합니다.

제공된 코드를 고려하세요.

#include 

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인 경우에만 두 요소가 동일한 것으로 간주된다는 엄격한 약한 순서 규칙을 위반합니다.

비교를 < other.a의 경우 a가 other.a보다 엄격하게 작은 경우에만 true를 반환하므로 규칙이 충족됩니다. 엄격한 순서를 사용하면 동일한 요소를 만날 때 알고리즘이 무한 루프에 들어가는 것을 방지할 수 있습니다.

결론적으로, std::sort는 연산자가 아닌 것과 충돌합니다< 비교 함수는 엄격한 약한 순서 규칙을 위반하여 잠재적으로 무한 루프가 발생할 수 있기 때문입니다. 따라서 예기치 않은 동작을 방지하려면 비교 기능이 이 규칙을 준수하는지 확인하는 것이 중요합니다.

위 내용은 엄격하지 않은 약한 순서 비교 기능을 사용할 때 `std::sort`가 충돌하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿