Как удалить вектор struct, который содержит вектор int

97
9

Я хочу удалить 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());
}
}
}

error: C2064: термин не вычисляет функцию, принимающую 1 аргумент

спросил(а) 2021-01-19T16:23:26+03:00 2 месяца, 3 недели назад
1
Решение
86

Вам не нужно использовать цикл loop, просто используйте следующую DelFun в 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());

ответил(а) 2021-01-19T16:23:26+03:00 2 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема