在 std::map 中使用 char* 作为 Key
在 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* 键指向的实际字符串,确保正确的排序和检索基于字符串值的元素。
以上是如何正确使用 char* 作为 C std::map 中的键?的详细内容。更多信息请关注PHP中文网其他相关文章!