我熟悉Python的字典功能,我根据自己的研究假设C ++的地图功能相对类似。但是我遇到了“转换”问题:
std::string dictionary(std::string inquiry){
std::map<std::string, std::string> mapK;
mapK["12th st. Oakland City Center"]="12th";
mapK["16th st. Mission"]="16th";
return mapK.find(inquiry);
}
这是一个字符串函数,它应该接收一个字符串然后用相应的键返回一个返回main的字符串。很显然,return语句存在问题。
error: could not convert 'mapK.std::map<_Key, _Tp, _Compare, _Alloc>::find<std::basic_string<char>, std::basic_string<char>, std::less<std::basic_string<char> >, std::allocator<std::pair<const std::basic_string<char>, std::basic_string<char> > > >((*(const key_type*)(& inquiry)))' from 'std::map<std::basic_string<char>, std::basic_string<char> >::iterator {aka std::_Rb_tree_iterator<std::pair<const std::basic_string<char>, std::basic_string<char> > >}' to 'std::string {aka std::basic_string<char>}'
return mapK.find(inquiry);
答案 0 :(得分:0)
std::map::find()
返回迭代器,特别是std::map::iterator
。
你需要解决的唯一问题就是取消引用:
return *mapK.find(inquiry);
甚至更好,只需使用operator[]
:
return mapK[inquiry];
请注意,如果inquiry
不在地图中,则会返回空字符串。在查找的情况下,它是直接未定义的行为。
答案 1 :(得分:0)
问题在于find
的返回类型。它不返回映射类型。相反,它返回一个迭代器。
查找的签名是iterator find( const Key& key );
(参见here;还有const重载)。
您还应该检查是否找到了密钥。所以你可以写点像
MapType::iterator i = mapK.find(inquiry);
if (i != mapK.end())
return i->second;
else
return ""; // or handle error some other way
或者您可以使用成员访问operator[]
,但如果找不到密钥,这将在地图中插入默认构造元素。