콘텐츠로 이동
  1. 맵 : 컨테이너를 입력으로 받아, 컨테이너의 모든 원소들에 함수(\(f(x)\))를 적용하는 연산입니다.
1 2 3 4 5

\(f(x)=2x\)일 때,

2 4 6 8 10
  1. 리듀스 : 컨테이너의 모든 원소를 함수(\(f(acc,x)\))를 적용하여 하나의 값으로 축약하는 연산입니다.
1 2 3 4 5

\(f(a,x)=a+x\)일 때,

\(((((1+2)+3)+4)+5)=15\)

C++에서는 transform()과 accumulate() 함수를 맵과 리듀스로 제공합니다.

다음은 맵과 리듀스 구현의 코드입니다. ```cpp

include

include

include

include

include

using namespace std;

void transform_test(vector S) { vector Tr; cout<<"[맵 테스트]"<<endl; cout<<"입력 배열, S: "; for(auto i : S) cout<<i<<" "; cout<<endl;

transform(S.begin(),S.end(),back_inserter(Tr),[](int x){return pow(x, 2.0);});
cout<<"transform(), Tr: ";
for(auto i : Tr)
    cout<<i<<" ";
cout<<endl;

for_each(S.begin(),S.end(),[](int & x){return x=pow(x, 2.0);});
cout<<"for_each(), S: ";
for(auto i : S)
    cout<< i << " ";
cout<<endl;

}

void reduce_test(vector S) { cout<<endl<<"[리듀스 테스트]"<<endl; cout<<"입력 배열, S: "<<endl; for(auto i : S) cout<<i<<" "; cout<<endl;

auto ans=accumulate(S.begin(),S.end(),0,[](int acc, int x){return acc+x;});
cout<<"accumulate(), ans: "<<ans<<endl;

}

int main() { vector S{1,10,4,7,3,5,6,9,8,2}; transform_test(S); reduce_test(S); return 0; }