gpt4 book ai didi

c++ - 如何对 map 使用 copy_if

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:46:03 26 4
gpt4 key购买 nike

我正在尝试使用 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));
}

我得到的错误:

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

  2. 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"

  3. 错误 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com