在c ++中进行映射和字符串转换时出错

时间:2017-11-17 15:48:17

标签: c++ dictionary key

我熟悉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);

2 个答案:

答案 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[],但如果找不到密钥,这将在地图中插入默认构造元素。