C++代码赏析:Map、Filter、Reduce
2023-01-03 13:58:24来源:今日头条
出自Google的论文《MapReduce: simplified data processing on large clusters》,MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算。概念"Map(映射)"和"Reduce(归约)",是它们的主要思想,都是从函数式编程语言里借来的,还有从矢量编程语言里借来的特性。它极大地方便了编程人员在不会分布式并行编程的情况下,将自己的程序运行在分布式系统上。
程序 = 算法 + 数据结构算法 = 控制 + 逻辑程序复杂度 = 控制复杂度(可降低) + 逻辑复杂度(理论下限)架构或设计目的就是分离控制和逻辑函数式编程中的 map、reduce、filter,它们都是一种控制。而参数 lambda 是逻辑(我们要解决的问题),它们一起组成了一个算法。最后,我再把数据放在数据结构里进行处理,最终就成为了我们的程序。
注:vegetarian 素食主义者
(相关资料图)
C++ | |
map | std::transform |
filter | std::remove_if |
reduce | std::accumulate |
#include#include #include #include using namespace std;int main(){ std::vector nums{ 1, 2, 3, 4, 5, 6, 7, 8, 9 }; std::vector cache (nums.size()); // filter auto it = std::copy_if (nums.begin(), nums.end(), cache.begin(), [](int n){return n % 2 == 1;}); // shrink container to new size cache.resize(std::distance(cache.begin(),it)); // map std::transform(cache.begin(), cache.end(), cache.begin(), [](int n) -> int {return n * n; }); auto result = std::accumulate(cache.begin(), cache.end(), 0, [] (int carry, int n){ return carry + n;}); std::cout << result << std::endl; return 0;}
在线测试
https://wandbox.org/permlink/yqa3d46oSx2GnVoQ