【发布时间】:2018-09-15 13:50:28
【问题描述】:
我想知道如何使用模板函子作为 find_if 的参数。我不确定语法。
例如,假设一个函子从产品的多重映射中删除一个产品。为此,我必须“扫描”多图,找到乘积(使用我的相等函子)并将其删除。
这是我的“相等”函子:
class isEqual
{
public:
isEqual(T* t) : t_(t) {}
bool operator()(const pair<int, T*> pair) const
{
return (pair.second == t_);
}
private:
T* t_;
};
这是一个叫做“擦除乘积”的函子,我必须使用我的“相等”乘积:
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_;
Product 是一个类。所以我的问题是关于我写“USE_EQUAL_FUNCTOR_HERE”的地方。我无法弄清楚正确的语法。我试过了:
IsEqual(), IsEqual(product)
还有一些其他的东西。
提前致谢!
【问题讨论】:
-
IsEqual(product)没用?错误是什么? -
你从哪里得到
T的pair<int, T*>? -
你可能忘记了
template <class T> class isEqual{.... -
投票结束,因为 cmets 正在猜测丢失的代码并猜测丢失的错误消息。
-
code compiling,你应该读一本关于 C++ 的好书。
标签: c++ templates iterator maps functor