> 백엔드 개발 > C++ > C std::map에서 char*를 키로 올바르게 사용하려면 어떻게 해야 합니까?

C std::map에서 char*를 키로 올바르게 사용하려면 어떻게 해야 합니까?

Linda Hamilton
풀어 주다: 2024-12-11 11:37:10
원래의
553명이 탐색했습니다.

How Can I Correctly Use char* as Keys in a C   std::map?

std::map에서 char*를 키로 사용

C에서는 char 포인터(char)을 std::map의 키로 사용합니다. 이는 char 키를 사용하여 맵을 생성하려고 할 때 예상치 못한 동작이 발생할 때 발생할 수 있습니다.

이 문제를 해결하려면 기본적으로 std::map이 포인터 주소를 사용하여 키를 비교한다는 점을 이해하는 것이 중요합니다. 그들이 나타내는 실제 문자가 아닙니다. 이로 인해 잘못된 비교 및 ​​신뢰할 수 없는 동작이 발생할 수 있습니다.

이 문제를 해결하려면 지도에 비교 기능을 제공해야 합니다. 비교 함수는 키를 비교하는 방법을 정의하는 함수입니다. char* 포인터가 가리키는 null로 끝나는 문자열을 비교하는 펑터를 사용하면 맵이 해당 문자열 값을 기반으로 요소를 올바르게 정렬하고 검색하는지 확인할 수 있습니다.

다음은 char* 키에 대한 비교 펑터:

struct cmp_str
{
   bool operator()(char const *a, char const *b) const
   {
      return std::strcmp(a, b) < 0;
   }
};
로그인 후 복사

비교 펑터를 정의한 후에는 이를 세 번째 템플릿 매개변수로 전달할 수 있습니다. 표준::맵. 그러면 지도가 키 비교를 위해 펑터를 사용하게 됩니다.

map<char *, int, cmp_str> BlahBlah;
로그인 후 복사

비교 펑터를 제공하면 char* 키가 가리키는 실제 문자열을 비교하도록 지도에 지시하여 올바른 정렬 및 검색이 보장됩니다. 문자열 값을 기반으로 요소를 구성합니다.

위 내용은 C std::map에서 char*를 키로 올바르게 사용하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿