728x90
728x170
맵(Map)과 리듀스(Reduce)
- 맵과 리듀스라는 용어는 Lisp와 같은 함수형 프로그래밍 언어에서 기원함.
맵(Map)
- 컨테이너
C
를 입력으로 받아, 컨테이너의 모든 원소에 함수f(x)
를 적용하는 연산- 예)
f(x) = x²
함수를 사용할 경우에 대한 맵 연산
- 예)

리듀스(Reduce)
- 컨테이너
C
의 모든 원소x
에 함수f(acc, x)
를 적용하여 하나의 값으로 축약하는 연산- 예)
f(acc, x) = acc + x
함수를 사용할 경우에 대한 리듀스 연산
- 예)

코드
#include <iostream> #include <vector> #include <algorithm> #include <numeric> #include <cmath> void transform_test(std::vector<int> S) { std::vector<int> Tr; std::cout << "[맵 테스트]" << std::endl; std::cout << "입력 배열, S: "; for (auto i : S) { std::cout << i << " "; } std::cout << std::endl; // std::transform() 함수 사용 std::transform(S.begin(), S.end(), std::back_inserter(Tr), [](int x) { return std::pow(x, 2.0); }); std::cout << "std::transform(), Tr: "; for (auto i : Tr) { std::cout << i << " "; } std::cout << std::endl; // std::for_each() 함수 사용 std::for_each(S.begin(), S.end(), [](int& x) { x = std::pow(x, 2.0); }); std::cout << "std::for_each(), S: "; for (auto i : S) { std::cout << i << " "; } std::cout << std::endl; } void reduce_test(std::vector<int> S) { std::cout << std::endl << "[리듀스 테스트]" << std::endl; std::cout << "입력 배열, S: "; for (auto i : S) { std::cout << i << " "; } std::cout << std::endl; // std::accumulate() 함수 사용 auto ans = std::accumulate(S.begin(), S.end(), 0, [](int acc, int x) { return acc + x; }); std::cout << "std::accumulate(), ans: " << ans << std::endl; } int main() { std::vector<int> S {1, 10, 4, 7, 3, 5, 6, 9, 8, 2}; transform_test(S); reduce_test(S); return 0; }
결과
[맵 테스트] 입력 배열, S: 1 10 4 7 3 5 6 9 8 2 std::transform(), Tr: 1 99 16 49 9 24 36 81 64 4 std::for_each(), S: 1 99 16 49 9 24 36 81 64 4 [리듀스 테스트] 입력 배열, S: 1 10 4 7 3 5 6 9 8 2 std::accumulate(), ans: 55
728x90
그리드형(광고전용)
'Computer Science > Data Structure' 카테고리의 다른 글
[Python] 원형 연결 리스트(Circular Linked List) (0) | 2022.04.21 |
---|---|
[Python] 단순 연결 리스트(Singly Linked List) (0) | 2022.04.21 |
[Python] 선형 리스트(Linear List) (0) | 2022.04.21 |
[C++] 디스조인트-셋(Disjoint-Set) ; 유니언-파인드(Union-Find), 서로소 집합, 상호 배타적 집합 (0) | 2021.06.26 |
[C++] 퀵 정렬(Quick Sort) (0) | 2021.06.02 |
[C++] 병합 정렬(Merge Sort) (0) | 2021.06.02 |
[C++] 선형 탐색(Linear Search), 이진 탐색(Binary Search) (0) | 2021.05.29 |
[C++] 블룸 필터(Bloom Filter) (0) | 2021.05.28 |