我正在尝试使用 copy_if 复制地图(我想要将 _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:指定为无返回值类型的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>>>>)>> >”没有成员“second”
错误 C2039:“second”:不是“std :: map <_Kty,_Ty>”的成员
感谢您的帮助!
Manhattan_Distance
本身是一个lambda吗?如果是,你需要捕获它-copy_if
谓词应该是[Manhattan_Distance](decltype(...)...
。如果不是这种情况,请更新问题,展示Manhattan_Distance
的定义以及它在调用copy_if
时的定义位置。 - Praetorianbool Search::Manhattan_Distance(const pair& the_pair)
{
return (_radius >= fabs(_citymap[_city].first - the_pair.first) + fabs(_citymap[_city].second - the_pair.second));
}
- user3617423Manhattan_Distance
是Search
类的非静态成员函数。假设copy_if
调用发生在同一类的另一个成员中,你需要捕获this
指针才能调用其他成员函数。因此,你的 lambda 表达式应该是[this](decltype(...)...
。 - Praetorian