اگر قراره در جا فیلتر کنید از std::remove_if و دادن لامبدا به ورودی سوم استفاده کنید .
class Laptop {
public:
Laptop(std::string name,int price) {
this->name = name;
this->price = price;
}
std::string name;
int price;
};
int main()
{
std::vector<Laptop> vec;
vec.push_back(Laptop("Lenovo-z500",1300));
vec.push_back(Laptop("Asus-1080",1200));
vec.push_back(Laptop("MacBookPro",25000));
//only lenovo laptops
vec.erase(remove_if(vec.begin(), vec.end(),
[]( Laptop elem )
{
return elem.name.find("Lenovo");
}),vec.end());
for (auto elem : vec) {
std::cout << elem.name << "\n";
}
//Price more than 15000
vec.erase(remove_if(vec.begin(), vec.end(),
[](const Laptop& elem)
{
return elem.price<15000;
}), vec.end());
for (auto elem : vec) {
std::cout << elem.name<<"\n";
}
}
اگر نیازه کپی هم از آرایه اصلی داشته باشید بجای remove_if از std::copy_if استفاده کنید :
int main()
{
std::vector<Laptop> vec,dest;
vec.push_back(Laptop("Lenovo-z500",1300));
vec.push_back(Laptop("Asus-1080",1200));
vec.push_back(Laptop("MacBookPro",25000));
//only lenovo laptops
std::copy_if(vec.begin(),vec.end(), std::back_inserter(dest),
[](const Laptop& elem) {
return !elem.name.find("Lenovo");
});
for (auto elem : dest) {
std::cout << elem.name << "\n";
}
}