C++20中使用Lambda与ranges::find_if出现重载匹配错误求助
解决ranges::find_if匹配失败的语法错误
错误根源确实在你定义的lambda表达式上:
auto is_gt_or_eq = [height, i](int x) { height[x] >= height[i]; };
核心问题:lambda缺少返回值
ranges::find_if要求第三个参数(谓词)必须返回布尔值,用来判断当前元素是否符合查找条件。你的lambda里只写了比较表达式height[x] >= height[i];,但没有用return返回这个比较结果,导致编译器无法推导出lambda的返回类型,进而无法匹配ranges::find_if的重载版本。
对比cppreference的示例代码,人家的lambda明确通过return返回布尔结果:
auto is_even = [](int x) { return x % 2 == 0; };
修复代码
给你的lambda加上return即可:
auto is_gt_or_eq = [height, i](int x) { return height[x] >= height[i]; };
额外优化建议
你当前用传值捕获height会触发容器的拷贝操作,如果height是较大的容器,会造成不必要的性能损耗。建议改用引用捕获(注意保证height和i在lambda的生命周期内始终有效):
auto is_gt_or_eq = [&height, i](int x) { return height[x] >= height[i]; };
内容的提问来源于stack exchange,提问作者Jam66125
相关产品推荐
相关产品推荐

