C++ 无法转换无序的地图<;char,char>;到无序地图<;字符、字符串>;
这段代码运行成功,结果是“找到了角色”C++ 无法转换无序的地图<;char,char>;到无序地图<;字符、字符串>;,c++,string,dictionary,C++,String,Dictionary,这段代码运行成功,结果是“找到了角色” 无序地图mp; mp['a']='b'; 字符b='b'; 如果(mp['a']&&mp['a']==b) cout条件mp['a']不检查元素是否存在,而是获取该键的值。如果不存在值,它将创建一个值,并将其插入到映射中,然后返回该值 这意味着mp['a']将返回一个std::string对象,并且不能将std::string用作布尔表达式 这使得检查mp['a']在这两种情况下都毫无用处。如果您想查看映射中是否存在某个元素,则需要使用它,这会增加一层复杂
无序地图mp;
mp['a']='b';
字符b='b';
如果(mp['a']&&mp['a']==b)
cout条件mp['a']
不检查元素是否存在,而是获取该键的值。如果不存在值,它将创建一个值,并将其插入到映射中,然后返回该值
这意味着mp['a']
将返回一个std::string
对象,并且不能将std::string
用作布尔表达式
这使得检查mp['a']
在这两种情况下都毫无用处。如果您想查看映射中是否存在某个元素,则需要使用它,这会增加一层复杂性(如果您的标准库支持即将推出的C++20功能,则使用它)。我得到了一个要点,即我需要使用find()函数来搜索映射中是否存在键。但是如果检查mp['a']有点无用,我们不能使用std::string作为布尔表达式,那么它为什么没有在无序映射的第一种情况下抛出错误呢。@RishabhMurarka因为mp['a']
将插入并返回一个char
值0
,而char
实际上是一个整数类型。整数0
可以转换为bool
值false
。
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";