2014-09-21 3 views
0

Я хочу, чтобы удалить некоторые Val[i] следующим образом:Как удалить вектор структуры, которая содержит вектор Int

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 аргумент

ответ

3

Вы не должны использовать для петли петли, просто используйте следующий 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()); 
+0

Большое спасибо, это работает. – user3823821

Смежные вопросы