我正在尝试使用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 回答
copy_if
要求谓词采用通过解除引用迭代器(或从该类型可隐式转换的内容)获得的类型的参数,在本例中为map::value_type
,这是std::pair<const KeyType, ValueType>
. 将lambda表达式更改为:我假设你的
Manhattan_Distance()
函数看起来像这样:使用C 14,您甚至可以将
decltype(...)
部分保留在参数类型之外: