C++ 在find_if中使用函子
我想知道如何使用模板函子作为find_if的参数。我不确定语法 例如,假设一个函子从产品的多重映射中删除一个产品。要做到这一点,我必须扫描多重映射,使用相等函子找到乘积并将其删除 这是我的“相等”函子:C++ 在find_if中使用函子,c++,templates,iterator,maps,functor,C++,Templates,Iterator,Maps,Functor,我想知道如何使用模板函子作为find_if的参数。我不确定语法 例如,假设一个函子从产品的多重映射中删除一个产品。要做到这一点,我必须扫描多重映射,使用相等函子找到乘积并将其删除 这是我的“相等”函子: class isEqual { public: isEqual(T* t) : t_(t) {} bool operator()(const pair<int, T*> pair) const { return (pair.second ==
class isEqual
{
public:
isEqual(T* t) : t_(t) {}
bool operator()(const pair<int, T*> pair) const
{
return (pair.second == t_);
}
private:
T* t_;
};
还有其他一些东西
提前谢谢
首先,您必须使isEqual成为一个类模板。正如贴出的,它不是。
然后,您将使用Product作为模板参数来创建实例,并将其作为参数来查找_if。
及
IsEqualproduct不起作用?错误是什么?你从哪里得到C++中的T?你可能忘记了模板类IsIsA{{投票关闭,因为注释是猜测丢失的代码,猜测丢失的错误信息。你应该读一本关于C++的好书。
class EraseProduct
public:
EraseProduct(multimap <int, Produit*>& multimap) : multimap_(multimap) {} ; // constructor that initializes 'multimap_' attribute
multimap <int, Product*>& operator()(Product* product)
{
auto it = find_if(multimap_.begin(), multimap_.end(), USE_EQUAL_FUNCTOR_HERE)
if (it != multimap_.end)
multimap_.erase(it)
return multimap_;
}
private:
multimap<int, Product*>& multimap_;
IsEqual(), IsEqual(product)
template <typename T>
class isEqual
{
...
};
auto it = find_if(multimap_.begin(), multimap_.end(), isEqual<Product>());