- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试使用 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) +<br/>
fabs(_citymap[_city].second-the_pair.second));
}
我得到的错误:
错误 C3499:已指定为具有 void 返回类型的 lambda 无法返回值
IntelliSense: class "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>”的成员
谢谢你的帮助!
最佳答案
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);
}
关于c++ - 如何对 map 使用 copy_if,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23548139/
我是一名优秀的程序员,十分优秀!