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

如何在C++中不使用循环统计std::map内值大于0的元素数量?

不用循环统计std::map中值大于0的元素数量

嘿,你可以借助C++标准库的<algorithm>头文件里的std::count_if函数来搞定这个需求,完全不用自己手动写for/while循环。这个算法会帮你自动遍历容器,根据你指定的条件统计符合要求的元素数量。

完整实现代码

#include <map>
#include <string>
#include <iostream>
#include <algorithm> // 必须包含该头文件以使用std::count_if

int exists(const std::map<std::string, int>& m) {
    return std::count_if(m.begin(), m.end(),
        [](const std::pair<const std::string, int>& p) {
            return p.second > 0;
        });
}

int main() {
    const std::map<std::string, int> stuff = {
        {"book", 0},
        {"pencil", 7},
        {"eraser", 0},
        {"calculator", 1},
        {"rivers", 1},
        {"fish", 2},
        {"people", 0},
    };
    int num = exists(stuff);
    std::cout << num;
    return 0;
}

代码说明

  • 核心逻辑:std::count_if接收三个参数——容器的起始迭代器、结束迭代器,以及一个判断条件(谓词)。这里我们用lambda表达式作为谓词,检查每个map元素(std::pair<const std::string, int>类型)的second成员(对应的值)是否大于0。
  • 简洁优化(C++14及以上):如果你的编译器支持C++14,还可以用auto简化lambda的参数类型,让代码更灵活:
    return std::count_if(m.begin(), m.end(),
        [](const auto& p) {
            return p.second > 0;
        });
    
  • 运行结果:这段代码和你原来的循环实现功能完全一致,输出结果同样是4。

内容的提问来源于stack exchange,提问作者Chaldo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 22:34:06