如何删除包含int向量的struct的向量

时间:2014-09-21 01:28:33

标签: c++ vector

我想删除一些Val[i],如下所示:

struct Sstruct{
    int v1;
    double v2;
};

struct Sstruct2{
std::vector<int> id;
    double a;
    std::vector<Sstruct > b;
};

std::vector <Sstruct2> Val;

我尝试了这段代码,但是使用std::remove_if

我收到了错误
bool TestFun(Sstruct2 id1)
{
    bool result= true;

    if ((id1.a< somevalue) 
     {
        // fails
        result= false;
    }

    return result;
}

void DelFun()
{
    for (int i= 0; i< Val.size(); i++)
    {
        if (!TestFun(Val[i]))
        {
          **// here i don't now how to search for Val[i] that fails in the condition**
          Val.erase(std::remove_if(Val.begin(), Val.end(), 
          Val[i].id.begin()), Val.end());  
        }
    }
}

错误: C2064:术语不评估为带有1个参数的函数

1 个答案:

答案 0 :(得分:3)

您不必使用for循环,只需在DelFun

中使用以下内容即可
Val.erase(std::remove_if(Val.begin(), Val.end(), 
          []( const Sstruct2& id)
         {   // Lambda C++11  use flag -std=c++11
             return  ( id1.a < somevalue ) ;
         }
         Val.end()); 

// Or without Lambda 

struct TestFun
{
    bool operator()(const Sstruct2& i) const
    {
        return ( id1.a < somevalue ) ;
    }
};

Val.erase(std::remove_if(Val.begin(), Val.end(), 
         TestFun()
         Val.end());