소개
사용자 정의 클래스를 키로 사용하여 STL 맵을 활용하려고 할 때 프로그래머는 다음과 같은 문제를 겪을 수 있습니다. 비밀스러운 오류 메시지가 진행을 방해합니다. 이 기사에서는 이 오류의 원인을 자세히 알아보고 std::maps를 효과적으로 사용하기 위한 대체 접근 방식을 탐색합니다.
암호적인 오류 및 이유
제공된 예에 설명된 대로 , 사용자 정의 유형을 맵 키로 사용하면 컴파일러가 특정 유형에 적합한 비교 연산자를 찾을 수 없기 때문에 오류가 발생합니다. 이 경우 std::map은 연산자의 가용성에 의존합니다< 요소의 순서를 결정하는 함수
대체 접근 방식
1. 비교기 함수 객체:
오류를 피하는 한 가지 방법은 연산자< 기능. 이 접근 방식을 사용하면 사용자 정의 클래스에 대한 연산자 오버로드를 통해 노출하지 않고 비교 논리를 설정할 수 있습니다.
예를 들어 다음 코드 조각은 비교 함수 개체를 사용하여 Class1 인스턴스를 비교하고 정렬합니다.
struct Class1Compare { bool operator() (const Class1& lhs, const Class1& rhs) const { return lhs.id < rhs.id; } }; std::map<Class1, int, Class1Compare> c2int;</p> <p><strong>2. std::less:</strong></p> <p>의 특수화 대안적인 접근 방식은 사용자 정의 유형에 대해 특별히 비교 의미를 제공하기 위해 std::less 템플릿을 특수화하는 것입니다. 이는 명시적인 연산자를 노출하지 않고도 std::map의 기본 비교 동작과의 원활한 통합을 보장합니다. overload:</p> <pre class="brush:php;toolbar:false">namespace std { template<> struct less<Class1> { bool operator() (const Class1& lhs, const Class1& rhs) const { return lhs.id < rhs.id; } }; }
이러한 대안 중 하나를 채택함으로써 프로그래머는 사용자 정의 유형 키와 함께 std::maps를 효과적으로 사용할 수 있으므로 명시적인 연산자< STL 맵이 제공하는 유연성과 효율성을 유지하면서 오버로드합니다.
위 내용은 `std::map`에서 사용자 정의 유형을 키로 사용할 때 알 수 없는 오류가 발생하는 이유는 무엇이며 어떻게 해결할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!