从C ++中的用户定义数据类型的向量中删除元素

时间:2013-04-10 09:54:39

标签: c++

我有以下表格的结构:

 struct A{
     int t; int j;}

struct A的对象包含以下值:

     t      j
     20     191
     111    18
     888    90        

我将所有这些对象保存在std :: vector中。现在我想删除此向量中的元素,其中t == 111且j <20。现在我迭代向量,以便按照下面给出的方式删除元素:

std::vector<A>::size_type i = 0;
while ( i < v.size() ) {
    if ( (v[i].t==111) && (v[i].j<20) ) {
        v.erase( v.begin() + i );
    } else {
        ++i;
    }
}

有一种更好的方法可以删除用户定义数据类型的std :: vector中的元素,而不是迭代。

2 个答案:

答案 0 :(得分:3)

是:

#include <algorithm>

v.erase(std::remove_if(v.begin(), v.end(),
                       [](A const & x) { return x.t == 111 && x.j < 20; }),
        v.end());

答案 1 :(得分:2)

您希望将erase-remove idiomstd::remove_if

一起使用
v.erase(std::remove_if(v.begin(), v.end(), [](const A& a) {
  return a.t == 111 && a.j < 20;
}), v.end());

这基本上将lambda返回true的所有元素移动到向量的后面,然后一次性擦除它们。