这段代码运行成功,结果是“找到字符”。
unordered_map<char,char> mp;
mp['a'] = 'b';
char b='b';
if(mp['a'] && mp['a'] == b)
cout<<"Character Found";但是下面的代码给出了一个错误:
unordered_map<char,string> mp;
mp['a'] = "b";
string s="b";
if(mp['a']) && (mp['a'] == s))
cout<<"Character Found";错误是:
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>时却会失败
发布于 2018-07-18 15:27:19
条件mp['a']不会检查元素是否存在,它会获取该键的值。如果不存在任何值,那么它将创建一个value-initialized值,并将其插入到映射中,然后返回该值。
这意味着mp['a']将返回一个std::string对象,并且您不能将std::string用作布尔表达式。
这使得check mp['a']在这两种情况下都是无用的。如果希望查看映射中是否存在某个元素,则需要对其执行find操作,这会增加复杂性(如果您标准库支持即将到来的C++20特性,则使用contains )。
https://stackoverflow.com/questions/51395941
复制相似问题