فیلتر vector در c++ - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

فیلتر vector در c++

0 امتیاز
سلام .آیا تو c++11 روشی برای فیلتر کرئن وکتور وجود داره ؟
سوال شده دی 14, 1397  بوسیله ی hojat1 (امتیاز 875)   12 69 99

1 پاسخ

0 امتیاز

اگر قراره در جا فیلتر کنید از 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";
	}
}

 

 

پاسخ داده شده دی 14, 1397 بوسیله ی BlueBlade (امتیاز 15,315)   15 18 89
...