35

タイトルが示すように、特定の条件を満たすベクトル内のオブジェクトを削除/マージしたいと考えています。たとえば、値が 99 のベクトルから整数を削除する方法を知っているということです。

Scott Meyers による remove イディオム:

vector<int> v;
v.erase(remove(v.begin(), v.end(), 99), v.end());

しかし、遅延メンバー変数を含むオブジェクトのベクトルがあるとします。そして今、遅延が特定のしきい値よりも少ないすべてのオブジェクトを排除し、それらを1つのオブジェクトに結合/マージしたいと考えています。

プロセスの結果は、すべての遅延の差が少なくとも指定されたしきい値であるオブジェクトのベクトルである必要があります。

4

4 に答える 4

50

std::remove_if救助に来る!

99 は、遅延をフィルタリングするものに置き換えられUnaryPredicateます。これには、ラムダ関数を使用します。

そして、ここに例があります:

v.erase(std::remove_if(
    v.begin(), v.end(),
    [](const int& x) { 
        return x > 10; // put your condition here
    }), v.end());
于 2013-06-24T08:18:10.523 に答える
2

述語関数の使用 (C++11 の慣用的な方法):

v.erase(remove_if(
            v.begin(), v.end(), bind(greater<int>(), _1, 99)),
        v.end());
于 2013-06-24T08:37:30.727 に答える