C에서 프로그래밍에서 사용자 정의 클래스와 함께 STL 맵을 사용하면 종종 암호 같은 컴파일러 오류가 발생합니다. 특히, 오류 메시지 "'연산자<'와 일치하지 않습니다. in '__x < __y'"는 사용자 정의 유형의 키를 사용하여 요소에 액세스하려고 할 때 일반적입니다.
오류 메시지는 컴파일러가 액세스할 수 없음을 나타냅니다. 연산자 < 사용자 정의 유형의 두 인스턴스를 비교합니다. 이는 기본적으로 STL 맵에서 키 순서를 지정하기 위해 비교 연산자(operator<)가 필요하기 때문입니다. 그러나 사용자 정의 유형으로 작업할 때는 이 연산자를 자동으로 사용할 수 없습니다.
연산자를 정의하는 대신< 사용자 정의 유형의 경우 비교기 함수 객체 클래스를 만들 수 있습니다. 이 클래스는 사용자 정의 유형의 상대적 순서를 결정하는 특수 버전의 Operator()를 구현합니다. 그런 다음 이 비교기를 사용하도록 맵을 특수화할 수 있습니다.
struct Class1Compare { bool operator() (const Class1& lhs, const Class1& rhs) const { return lhs.id < rhs.id; } }; std::map<Class1, int, Class1Compare> c2int;</p> <h3>해결책 2: std::less 특수화</h3> <p>또 다른 대안은 사용자 정의 항목에 대해 std::less 템플릿을 특수화하는 것입니다. 유형. 이는 std::less 클래스 내에서 Operator()에 대한 사용자 정의 정의를 제공합니다.</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::less로 기본 설정되는 동시에 사용자에 대한 특정 구현을 제공할 수 있습니다. 정의된 유형.
STL 맵 및 사용자 정의 유형으로 작업할 때 키를 비교할 수 있는 방법을 제공하는 것이 필수적입니다. 이는 비교기 함수 객체를 통해 또는 std::less를 특수화하여 달성할 수 있습니다. 이러한 요구 사항을 해결함으로써 개발자는 사용자 정의 유형이 포함된 맵을 키로 효과적으로 활용할 수 있습니다.
위 내용은 C std::maps에서 사용자 정의 유형을 키로 어떻게 사용할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!