Filter in c++ mit Lambda nutzen
Filter werden benutzt, um Operationen auf einer großen Datenmenge auszuführen. In diesem Beispiel ist die Datenmenge allerdings überschaubar. Zunächst wird jedes Element modifiziert (map), dann ein Filter angewendet, um die Menge zu verkleinern. Abschließend folgt eine Reduzierung, bis nur noch ein Element übrig bleibt. Ein Anwendungsfall wären Streams.
#include <iostream>
#include <vector>
#include <algorithm>
#include <numeric>
auto map = [](int &elem) -> int {return elem-1;};
auto filter = [](int &elem) -> bool {return elem % 2 == 0 || elem <= 0;};
auto reduce = [](int &x, int &y) -> int {return x*y;};
int main(){
std::vector<int> origin{-3,-2,-1,0,1,2,3,4,5,6,7,8,9};
std::vector<int> afterMap;
// map: do something with all elements in this datastructure
std::transform(origin.begin(), origin.end(), std::back_inserter(afterMap), map);
// filter: conditions to skip elements
std::vector<int>::iterator vectorfilter = std::remove_if(afterMap.begin(), afterMap.end(), filter);
for(auto it = afterMap.begin(); it != vectorfilter; it++){
std::cout << *it << '\n';
};
// reduce: to reduce elements in this container via sum, multiply or other things
int result = std::accumulate(afterMap.begin(), vectorfilter, afterMap[0], reduce);
std::cout << result << '\n';
}
0
0
0.000
!LOL
!PIZZA
!BBH
@ozelot47! Your Content Is Awesome so I just sent 1 $BBH (Bitcoin Backed Hive) to your account on behalf of @dotwin1981. (1/1)
lolztoken.com
It's pretty handy.
Credit: reddit
@ozelot47, I sent you an $LOLZ on behalf of dotwin1981
(4/10)
ENTER @WIN.HIVE'S DAILY DRAW AND WIN HIVE!
$PIZZA slices delivered:
@dotwin1981(3/10) tipped @ozelot47