尝试从std :: map查找const char *键时出错

哈米德

我有一张这样声明的地图:

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”。当我搜索此密钥时,我得到“未找到”。例如:

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*,要知道,这样的要求是极其罕见的,应该只有当你准备好你的垃圾代码解释性意见正是如何以及为什么你的容器是安全的细节,甚至被认为是飞快; 提示:几乎可以肯定不是。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

尝试从std :: map查找const char *键时出错

来自分类Dev

C++:'char*' vs 'char',尝试分配变量时出错

来自分类Dev

创建 std::tuple 时从 const char* 或 char* 推导出 std::string

来自分类Dev

mySQL:尝试创建外键时出错

来自分类Dev

使用std :: map :: at时出错

来自分类Dev

尝试从map <char,char> C中获取char时出现“错误:预期为'{'引入了lambda主体”

来自分类Dev

std :: string和const char *

来自分类Dev

从std :: map <std :: basic_string <char>,std :: pair <int,int(*)(const std :: vector :: Mat

来自分类Dev

尝试在地图中查找元素时出错

来自分类Dev

尝试查找任何int数组时出错

来自分类Dev

将const char **转换为std :: vector <const char *>

来自分类Dev

在std :: map中容忍键查找

来自分类Dev

在std :: map中的容忍键查找

来自分类Dev

尝试覆盖const char *是错误的访问

来自分类Dev

C ++“错误:将'const std :: map <int,std :: basic_string <char>>'作为...的'this'参数传递”

来自分类Dev

尝试将int转换为const char时出现分段错误

来自分类Dev

尝试在mysql中存储特定的json键时出错

来自分类Dev

尝试在SQL中为表创建外键时出错?

来自分类Dev

尝试使用 Laravel 迁移添加外键约束时出错

来自分类Dev

C ++ std :: map查找值但不查找键

来自分类Dev

尝试将 char[] 存储到 char* 时出现问题

来自分类Dev

将const char *转换为std :: string

来自分类Dev

std :: to_string存储在const char *中

来自分类Dev

std :: string.assign(const char *)或op =(带有const char *)会创建char *的副本吗?

来自分类Dev

std :: string.assign(const char *)或op =(带有const char *)会创建char *的副本吗?

来自分类Dev

如何解决类型'std :: map <AudioTypes,const char *>`的`no可行的重载operator []?

来自分类Dev

const std::unordered_map<char, int>' as 'this' 参数丢弃 lambda 中的限定符

来自分类Dev

创建新文件时将std :: string转换为const char *错误

来自分类Dev

使用Visual Studio 2013直接从std :: ostringstream获取const char *时出现意外结果

Related 相关文章

  1. 1

    尝试从std :: map查找const char *键时出错

  2. 2

    C++:'char*' vs 'char',尝试分配变量时出错

  3. 3

    创建 std::tuple 时从 const char* 或 char* 推导出 std::string

  4. 4

    mySQL:尝试创建外键时出错

  5. 5

    使用std :: map :: at时出错

  6. 6

    尝试从map <char,char> C中获取char时出现“错误:预期为'{'引入了lambda主体”

  7. 7

    std :: string和const char *

  8. 8

    从std :: map <std :: basic_string <char>,std :: pair <int,int(*)(const std :: vector :: Mat

  9. 9

    尝试在地图中查找元素时出错

  10. 10

    尝试查找任何int数组时出错

  11. 11

    将const char **转换为std :: vector <const char *>

  12. 12

    在std :: map中容忍键查找

  13. 13

    在std :: map中的容忍键查找

  14. 14

    尝试覆盖const char *是错误的访问

  15. 15

    C ++“错误:将'const std :: map <int,std :: basic_string <char>>'作为...的'this'参数传递”

  16. 16

    尝试将int转换为const char时出现分段错误

  17. 17

    尝试在mysql中存储特定的json键时出错

  18. 18

    尝试在SQL中为表创建外键时出错?

  19. 19

    尝试使用 Laravel 迁移添加外键约束时出错

  20. 20

    C ++ std :: map查找值但不查找键

  21. 21

    尝试将 char[] 存储到 char* 时出现问题

  22. 22

    将const char *转换为std :: string

  23. 23

    std :: to_string存储在const char *中

  24. 24

    std :: string.assign(const char *)或op =(带有const char *)会创建char *的副本吗?

  25. 25

    std :: string.assign(const char *)或op =(带有const char *)会创建char *的副本吗?

  26. 26

    如何解决类型'std :: map <AudioTypes,const char *>`的`no可行的重载operator []?

  27. 27

    const std::unordered_map<char, int>' as 'this' 参数丢弃 lambda 中的限定符

  28. 28

    创建新文件时将std :: string转换为const char *错误

  29. 29

    使用Visual Studio 2013直接从std :: ostringstream获取const char *时出现意外结果

热门标签

归档