Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 无法转换无序的地图<;char,char>;到无序地图<;字符、字符串>;_C++_String_Dictionary - Fatal编程技术网

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";