std::sort
是在Compare类上参数化的模板。函数本身将该类的对象作为参数,并且"调用"它来比较待分类容器的元素。
我认为重要的是我们可以给一个具体的对象排序,而不是简单地让sort构造一个Compare对象本身。 (如果没有,请纠正我。)
现在假设我们要实现一个函数foo
,它将vector<T>
作为输入,并T
作为比较函数:
template <class T, class Compare>
bool foo(const vector<T>& v, Compare comp);
作为此实现的一部分,我们希望对包含T
和int
对的不同向量进行排序,即对vector<pair<T, int>>
进行排序。但我们只想基于T
组件对此向量进行排序。这意味着我们希望将T
上的给定订单提升到pair<T, int>
上的订单,并将其传递给std::sort
。
如何在不使用lambdas的情况下完成这项工作?我的问题是,我找不到将Compare
的{{1}} 对象提升为T
的方法的方法。我只能解除pair<T, int>
类,然后构造一个对象,这意味着Compare
将完全忽略其foo
参数。
感谢。
答案 0 :(得分:1)
您可以在函数内部定义一个局部结构吗?例如?
template <class T, class Compare>
bool foo(const vector<T>& v, Compare comp)
{
struct NewCompare
{
const Compare &rc;
NewCompare( const Conpare &comp ) : rc( comp ) {}
NewCompare( const NewCompare &comp ) : rc( comp.tc ) {}
bool operator ()( const std::pair<T, int> &p1, const std::pair<T, int> &p2 ) const
{
return rc( p1.first, p2.first );
}
};
//...
}
或者您可以编写一般功能适配器。