C++代码赏析:Map、Filter、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

例子

  1. 过滤出奇数
  2. 把上一步计算结果分别做平方处理
  3. 把上一步的结果进行求和
#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

网站栏目:C++代码赏析:Map、Filter、Reduce
当前路径:http://www.shufengxianlan.com/qtweb/news36/100236.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联