>  기사  >  백엔드 개발  >  std::map에서 부동 소수점 키를 어떻게 효과적으로 사용할 수 있습니까?

std::map에서 부동 소수점 키를 어떻게 효과적으로 사용할 수 있습니까?

Patricia Arquette
Patricia Arquette원래의
2024-11-09 11:16:02167검색

How Can You Effectively Use Floating-Point Keys in std::map?

Std:map의 부동 소수점 키 정밀도 문제

std::map의 키로 부동 소수점 값을 사용하면 다음과 같은 문제가 발생합니다. 부동 소수점 정밀도 제한. 일반적으로 발생하는 문제는 이러한 정밀도 문제로 인해 키를 찾을 수 없다는 것입니다.

대책

  1. 사용자 지정 비교 기능 구현:
    클래스에 이중 키를 캡슐화하고 연산자<(...)를 재정의하여 다음과 같은 비교 함수를 정의합니다. 부동 소수점 정밀도 문제를 처리합니다. 그러나 이 접근 방식은 컨테이너의 순서 요구 사항을 위반하여 예측할 수 없는 동작을 초래할 가능성이 있습니다.
  2. Multimap 또는 Multiset 활용:
    std::multimap 또는 std::multiset 사용 부동 소수점 키를 저장하면 각 키에 대해 여러 값을 허용하여 중복 가능성을 해결합니다. 키.
  3. Epsilon 허용 오차 도입:
    컨테이너를 쿼리할 때 엡실론 임계값을 적용하는 도우미 함수를 만듭니다. 이 함수는 equal_range 함수를 사용하여 대상 키에 "충분히 가까운" 키 범위를 찾아서 대략적인 일치를 허용하면서 컨테이너가 순서를 유지하도록 합니다.

고려 사항

std::map 또는 std::set에서 부동 소수점 키를 사용하는 것은 일반적으로 권장되지 않습니다. 부동 소수점 값의 본질적인 취약성으로 인해 코드를 신뢰할 수 없게 될 수 있습니다. 또는 부동 소수점 정밀도 문제를 더 잘 수용하는 다른 데이터 구조를 사용하는 것이 좋습니다.

위 내용은 std::map에서 부동 소수점 키를 어떻게 효과적으로 사용할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.