首页 文章

如何将copy_if用于 Map

提问于
浏览
1

我正在尝试使用copy_if复制 Map (我想将_citymap复制到_the_cities) . 这是我的代码:

std::map <string, pair <float,float>> _citymap;

copy_if(_citymap.begin(),_citymap.end(),
std::inserter(_the_cities,_the_cities.end()),
[this](decltype(_citymap)::value_type const &kv_pair) {
return (Manhattan_Distance(kv_pair.second));});

Manhattan_Distance函数是一个bool函数:

bool Search:: Manhattan_Distance (const pair <float, float> &the_pair) { return (_radius >= fabs(_citymap[_city].first-the_pair.first) + fabs(_citymap[_city].second-the_pair.second)); }

我得到的错误:

  • 错误C3499:已指定具有void返回类型的lambda无法返回值

  • IntelliSense:类“std :: map(std :: string,std :: pair(float,float),std :: less(std :: string),std :: allocator(std :: pair(const std ::) string,std :: pair(float,float >>>>“没有成员”第二个“

  • 错误C2039:'second':不是'std :: map <_Kty,_Ty>'的成员

谢谢您的帮助!

1 回答

  • 2

    copy_if 要求谓词采用通过解除引用迭代器(或从该类型可隐式转换的内容)获得的类型的参数,在本例中为 map::value_type ,这是 std::pair<const KeyType, ValueType> . 将lambda表达式更改为:

    [](decltype(_citymap)::value_type const& kv_pair) {
        return Manhattan_Distance(kv_pair.second);
    }
    

    我假设你的 Manhattan_Distance() 函数看起来像这样:

    bool Manhattan_Distance(std::pair<float, float> const& the_pair)
    { return /* ... */; }
    

    使用C 14,您甚至可以将 decltype(...) 部分保留在参数类型之外:

    [](auto const& kv_pair) {
        return Manhattan_Distance(kv_pair.second);
    }
    

相关问题