- 맵 : 컨테이너를 입력으로 받아, 컨테이너의 모든 원소들에 함수(\(f(x)\))를 적용하는 연산입니다.
| 1 | 2 | 3 | 4 | 5 |
|---|---|---|---|---|
\(f(x)=2x\)일 때,
| 2 | 4 | 6 | 8 | 10 |
|---|---|---|---|---|
- 리듀스 : 컨테이너의 모든 원소를 함수(\(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
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
auto ans=accumulate(S.begin(),S.end(),0,[](int acc, int x){return acc+x;});
cout<<"accumulate(), ans: "<<ans<<endl;
}
int main()
{
vector