پاسخ داده شده: فیلتر vector در c++
اگر قراره در جا فیلتر کنید از 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 ) { retu 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) { retu 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) { retu !elem.name.find("Lenovo"); }); for (auto elem : dest) { std::cout << elem.name << "n"; }
}
