>백엔드 개발 >C++ >C STL 맵에서 사용자 정의 키 유형을 사용하는 방법은 무엇입니까?

C STL 맵에서 사용자 정의 키 유형을 사용하는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-12-24 01:54:10484검색

How to Use User-Defined Key Types with C   STL Maps?

사용자 정의 키 유형을 사용하는 STL 맵 이해

C에서 STL 맵은 고유 키를 기반으로 데이터를 구성하기 위한 강력한 데이터 구조를 제공합니다. . 그러나 사용자 정의 유형의 맵을 사용하면 컴파일 오류가 발생할 수 있습니다.

근본 원인: 비교 연산자 누락

오류 메시지는 오버로드된 less- 사용자 정의 클래스인 Class1에 대한 연산자(<)입니다. 기본적으로 std::map은 맵이 효율적인 조회 및 정렬을 수행하는 데 필요한 연산자<를 사용하여 키를 비교할 수 있을 것으로 기대합니다.

사용자 정의 비교기로 해결

이 문제를 해결하려면 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>여기서 Class1Compare 클래스는 ID 값을 기준으로 Class1 객체를 비교하기 위한 구현을 제공합니다.</p>
<p><strong>대안: std::less 전문화</strong></p>
<p>또는 Class1에 대한 std::less 템플릿을 특수화할 수 있습니다. 개체:</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를 전문화하면 코드 복잡성을 최소화하면서 Class1 개체에 대한 구체적인 비교 논리를 제공할 수 있습니다.

위 내용은 C STL 맵에서 사용자 정의 키 유형을 사용하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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