概念出自Google的论文《MapReduce:simplifieddataprocessingonlargeclusters》,MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算。概念"Map(映射)"和"Reduce(归约)",是它们的主要思想,都是从函数式编程语言里借来
概念 出自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 < iostream>
#include < vector>
#include < algorithm>
#include < numeric >
using namespace std;
int main( ) {
std:: vector< int > nums{ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 } ;
std:: vector< int > 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 ;
}
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34.
在线测试
复制 https: // wandbox.org / permlink/ yqa3d46oSx2GnVoQ