使用 const char* 键映射 C++ 检索空值

map c++ with const char* keys retrieves null

本文关键字:C++ 检索 空值 映射 const char 使用      更新时间:2023-10-16

所以,我正在尝试用C++学习map。我将类型作为变量monthstd:: map <const char *, int>

。比如说,数据是month["Jul"] = 7;

当我尝试直接检索值时

printf("%d", month["Jul"]);

它成功并输出值。

7

尝试使用另一个变量也会成功。

const char *p = "Jul";
printf("%d", month[p]); // 7

但是当我尝试用给定的输入分配它时,会发生奇怪的行为。

const char in_month[3];
scanf("%s", in_month);
print("%d". month[in_month]);

它检索(null)

0

是我在这里做了什么被禁止的事情,还是我错过了一步?

当你使用const char*作为键时,std::map将直接在指针上进行比较,但不会比较指针指向的内容。对于 c 样式的字符串文本,可以将相同的字符串文本进行比较为相等,但这不能保证。

允许(但不是必需(编译器为相等或重叠的字符串文本组合存储。这意味着,当通过指针进行比较时,相同的字符串文本可能会也可能不会相等。

当你使用数组in_month时,转换为指针后它指向不同的东西,那么指针比较结果是false

最好将std::string用作std:: map <std::string, int>std::string具有定义良好的比较运算符,该运算符基于字符串的内容进行比较。