无法将unordered_map <char,char>转换为unordered_map <char,string =“”>

时间:2018-07-18 07:23:38

标签: c++ string dictionary

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

if FORMAT = DELIMITED  then data must have Delimiter Field; ALL Columns should have a mandatory Starting Index. 
if FORMAT = FIXEDWIDTH  then data must have all Columns should have mandatory Starting and Ending Index.

但是以下代码给出了错误:

 if ( req.body.format == 'DELIMITED' )
 {
//then how to use my schema in my code??
 }

错误是:

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"; 可以正常工作,但在c ++中,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"; 会失败

1 个答案:

答案 0 :(得分:1)

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

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

这两种情况下都使支票mp['a']毫无用处。如果要查看地图中是否存在某个元素,则需要find,这会增加一层复杂性(如果标准库支持即将推出的C ++ 20功能,则可以使用contains