gpt4 book ai didi

c++ - 无法将 unordered_map 转换为 unordered_map

转载 作者:行者123 更新时间:2023-11-28 04:36:05 27 4
gpt4 key购买 nike

这段代码运行成功,结果为“Character Found”。

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>工作正常但在 unordered_map<char,string> 的情况下失败在 C++ 中

最佳答案

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

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

这使得检查 mp['a'] 在这两种情况下都毫无用处。如果你想查看某个元素是否存在于 map 中,你需要 find它增加了一层复杂性(如果您的标准库支持即将推出的 C++20 功能,则使用 contains)。

关于c++ - 无法将 unordered_map<char,char> 转换为 unordered_map<char, string>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51395941/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com