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 |