🐱
【C++】ラムダ式を使い倒す:for_eachとany_ofを使用して2つのvector型変数から同じ値を探す
vector型の変数a
,b
が共通して持っている値を総当り的に探してみました。any_of
はC++11以降対応のアルゴリズムです。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
vector< int > a = { 1, 2, 3, 4, 5 };
vector< int > b = { 5, 6, 7, 8, 9 };
vector< int > match_numbers;
for_each( a.begin(), a.end(), [ &match_numbers, &b ] ( const int &a_element ){
bool is_match = any_of( b.begin(), b.end(), [ &a_element ] ( const int &b_element ){
return ( a_element == b_element );
});
if ( is_match ) {
match_numbers.push_back(a_element);
}
});
for_each( match_numbers.begin(), match_numbers.end(), [] ( const int &match_number ){
cout << match_number << endl;
});
}
実行結果
5
for_each
はa
の全ての要素に対して処理を行います。そのためaの要素を1つずつa_element
に渡しています。
any_of
はb
の要素のいずれかが条件を満たしているかを調べます。bの要素b_element
の中にaの要素a_element
と一致する値が1つでもあればtrue
を返します。
Discussion
記事の趣旨と違いますが、
set_intersection
を使ったほうが楽になりますね。コメントありがとうございます。知りませんでした!勉強になります。