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 중국어 웹사이트의 기타 관련 기사를 참조하세요!