述語の 2 つのベクトルがあります。
typedef std::function<bool(int)> pred;
vector<pred> v1;
vector<pred> v2;
それらを 1 つにマージする必要がありますが、2 番目のベクトルからの述語は反転する必要があります (つまり、通常はtrue
返される場合に返される必要がありますfalse
)。したがって、実際には、一種の「反転」ラッパーが必要です。
元の述語を保持し、その値を反転する反転関数と構造体を作成しました。
struct inverted
{
pred pr;
inverted(pred pr_) : pr(pr_) {}
bool operator () (int i) {return !pr(i);}
};
pred CreateInverted(pred pr)
{
return inverted(pr);
}
これを使用すると、ベクトル述語の反転は次のようになります。
transform( v2.begin(), v2.end(), v2.begin(), CreateInverted );
しかし、特に標準ライブラリに基づいた、より良い解決策があるかどうか知りたいですか?
C++11 なし、Boost は許可されます。