gpt4 book ai didi

c++ - 将相同的 key (使用 malloc 创建)添加两次以映射

转载 作者:行者123 更新时间:2023-11-30 01:43:22 25 4
gpt4 key购买 nike

同一个键怎么可能在 map 中被添加两次?如果值被更改,它不应该覆盖该值吗?

static map<const char *, int> lMap;
const char * msg = "hhhhh";

char *buf = (char *) malloc(5);
strcpy(buf, msg);

lMap.insert(make_pair(buf, 85));
buf = (char *) calloc(5, sizeof (char));

strcpy(buf, msg);
lMap.insert(make_pair(msg, 85));

cout << "size: " << lMap.size() << endl;
map<const char *, int>::const_iterator it2;
for (it2 = lMap.begin(); it2 != lMap.end(); ++it2) {
cout << it2->first << " | " << it2->second << endl;
}

打印结果:

size: 2
hhhhh | 85
hhhhh | 85

最佳答案

const char*是一个指针。将两个指针与 < 进行比较比较它们指向的地址。默认情况下,std::map使用 <比较键。这意味着两个不同的 const char*对象是不同的键,即使它们在被解释为以 nul 结尾的字符串时恰好包含相同的数据。

您正在编写 C++,而不是 C。如果您需要一个字符串,请使用 std::string ,而不是指向希望成为 nul 终止缓冲区的东西的指针。

关于c++ - 将相同的 key (使用 malloc 创建)添加两次以映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37961154/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com