You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++20中如何更简洁地判断std::map所有值为0(不使用lambda或额外函数重载)

C++20中如何更简洁地判断std::map所有值为0(不使用lambda或额外函数重载)

嘿,刚好折腾过类似的场景,给你俩纯C++20的简洁写法,完全符合你“不用lambda也不额外写函数重载”的要求:

  • 方案一:用std::ranges::equal结合views::repeat
    这个写法我个人特别推荐,超直观——直接把map的所有值,和一个无限输出0的范围做比较。因为我们的values范围是有限的,ranges::equal会挨个比完所有元素,和你原来用all_of的效果一模一样,但代码短多了:

    return ranges::equal(views::values(m), views::repeat(0));
    
  • 方案二:简化原有的bind_front写法
    要是你习惯用all_of的逻辑,也可以稍微简化谓词部分——C++20里std::equal_to本身就是透明比较器,和std::ranges::equal_to在这个场景下没区别,所以可以把前缀简化,代码会短一点:

    return ranges::all_of(views::values(m), std::bind_front(std::equal_to{}, 0));
    

这两个方案完全依赖C++20标准库特性,不需要写任何自定义代码,完美避开了lambda和额外函数重载的限制。

备注:内容来源于stack exchange,提问作者Yan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 08:59:51