如何在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
相关产品推荐
相关产品推荐

