首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法将unordered_map<char,char>转换为unordered_map<char,string>

无法将unordered_map<char,char>转换为unordered_map<char,string>
EN

Stack Overflow用户
提问于 2018-07-18 15:23:38
回答 1查看 415关注 0票数 0

这段代码运行成功,结果是“找到字符”。

代码语言:javascript
复制
unordered_map<char,char> mp;
mp['a'] = 'b';
char b='b';
if(mp['a'] && mp['a'] == b) 
    cout<<"Character Found";

但是下面的代码给出了一个错误:

代码语言:javascript
复制
unordered_map<char,string> mp;
mp['a'] = "b";
string s="b";
if(mp['a']) && (mp['a'] == s))
    cout<<"Character Found";

错误是:

代码语言:javascript
复制
could not convert 'mp.std::unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>::operator[]<char, std::__cxx11::basic_string<char>, std::hash<char>, std::equal_to<char>, std::allocator<std::pair<const char, std::__cxx11::basic_string<char> > > >('a')' from 'std::unordered_map<char, std::__cxx11::basic_string<char> >::mapped_type {aka std::__cxx11::basic_string<char>}' to 'bool'
     if(mp['a']) && (mp['a'] == s)) cout<<"Character Found";

为什么unordered_map<char,char>可以正常工作,但在c++中使用unordered_map<char,string>时却会失败

EN

回答 1

Stack Overflow用户

发布于 2018-07-18 15:27:19

条件mp['a']不会检查元素是否存在,它会获取该键的值。如果不存在任何值,那么它将创建一个value-initialized值,并将其插入到映射中,然后返回该值。

这意味着mp['a']将返回一个std::string对象,并且您不能将std::string用作布尔表达式。

这使得check mp['a']在这两种情况下都是无用的。如果希望查看映射中是否存在某个元素,则需要对其执行find操作,这会增加复杂性(如果您标准库支持即将到来的C++20特性,则使用contains )。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51395941

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档