장애 극복: 사용자 정의 유형을 키로 사용하여 std::maps
C에서 키-값 쌍 매핑 영역 , 키 정의에 사용자 정의 유형이 선호되는 상황이 발생하는 것은 드문 일이 아닙니다. 그러나 사용자 정의 키로 std::maps를 활용하려고 하면 컴파일 중에 알 수 없는 오류 메시지가 나타날 수 있습니다. 이 오류와 그 의미를 이해하기 위해 std::maps와 사용자 정의 유형의 미묘한 차이를 살펴보겠습니다.
std::maps로 작업할 때 정수와 같은 기본 유형을 키로 사용하는 경우가 많습니다. 또는 문자열. 기본 유형에는 맵 내에서 효율적인 키 순서 지정을 용이하게 하는 잘 정의된 비교 연산자(<, >, == 등)가 있습니다. 그러나 사용자 정의 유형을 키로 사용할 때 이러한 비교 연산자의 구현은 맵의 올바른 기능에 중요하다는 점에 유의하는 것이 중요합니다. 여기서 발생한 오류 메시지가 나타납니다.
질문에 언급된 오류는 연산자가 없음을 암시합니다< 사용자 정의 Class1에 대한 구현입니다. 기본적으로 std::maps는 less<> 키를 비교하는 템플릿입니다. 덜<> 내부적으로 교환원을 호출합니다< 키 유형에 대해 정의됩니다. 불행하게도 Class1에는 이 연산자가 없기 때문에 컴파일 오류가 발생합니다.
이 문제를 해결하려면 다음과 같은 몇 가지 실행 가능한 솔루션이 있습니다.
struct Class1Compare { bool operator() (const Class1& lhs, const Class1& rhs) const { return lhs.id < rhs.id; } }; std::map<Class1, int, Class1Compare> c2int;</p> <ol start="3"><li> <strong>전문화 std::less:</strong> 비교 의미 체계가 사용에 중요하지 않은 경우 이 경우 Class1에 대한 std::less 템플릿을 특수화하는 것을 고려해보세요. 이 접근 방식을 사용하면 Class1 범위 외부에서 비교 기준을 정의할 수 있으므로 코드의 확장성이 향상됩니다.</li></ol> <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를 성공적으로 활용할 수 있습니다. :사용자 정의 유형을 키로 매핑합니다. 프로젝트 요구 사항 및 디자인 원칙에 가장 잘 맞는 솔루션을 선택하는 것이 중요합니다.
위 내용은 C의 std::maps에서 사용자 정의 유형을 키로 어떻게 사용할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!