gpt4 book ai didi

c++ - 尝试从 std::map 中查找 const char* 键时出错

转载 作者:太空狗 更新时间:2023-10-29 19:52:32 26 4
gpt4 key购买 nike

我有一个这样声明的 map :

std::map<const char*, const char*> map2D;

映射由 API 函数的输出填充,该函数返回 const char*:

map2D.insert(std::pair<const char*, const char*>(TempA, TempB));

现在有 50 个 TempA 值和 50 个 TempB 值,并且有一个名为“months”的键。当我搜索此 key 时,我“找不到”。例如:

std::map<const char*, const char*>::iterator it;
it = map2D.find("months");

if (it != map2D.end())
{
std::cout << "Found " << it->first << " " << it->second << '\n';
}
else
{
std::cout << "Not found\n";
}

但是当我这样做的时候:

map2D.insert(std::pair<const char*, const char*>("months", "June");  

我可以找到相应的月份。上网查了一下,了解到这个问题可能与const char*的使用有关。谁能进一步澄清这一点?

最佳答案

比较两个 const char*因为平等并不像你认为的那样;它比较指针值,而不是指针指向的字符串。对于字符串文字,这有时可能会“起作用”,但您无法知道即使其中包含相同字符的两个字符串文字也会存储在同一地址。您必须提供一个自定义比较器来调用 strcmp ,以使其可靠地工作。

使用 std::map<std::string, std::string>好多了 . 你的第三方API给你const char*并不重要: 你可以简单地构造 std::string来自那些。

此容器将包含具有明确所有权和生命周期语义的元素,并自动正确排序。简而言之,您所有的问题都会迎刃而解。

如果您仍然真的需要存储 const char* ,请注意这样的要求极其很少见,如果您准备在代码中乱扔解释性注释,详细说明您的容器如何以及为什么安全,则只应稍作考虑;提示:几乎可以肯定不是。

关于c++ - 尝试从 std::map 中查找 const char* 键时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24398824/

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