我是C ++的新手,我正在尝试使用std :: sort函数对解决方案的矢量进行排序。
代码是这样的(解决方案列表是*向量):
void SolutionSet::sort(Comparator &comparator) {
std::sort(solutionsList_->begin(), solutionsList_->end(), &comparator::compare);
}
比较器参数是Comparator的子类实例,比较方法在Comparator类中是虚拟的,并由所有Comparator的子类实现。
我想在std:sort()中使用该函数作为比较器函数。
这可能吗?
如果是,有人可以告诉我怎么样?因为使用前面的代码,它不起作用。
如果我没有说清楚,请问问!
谢谢你们!
答案 0 :(得分:5)
STL仿函数必须是单态的,因为STL仿函数是按值传递的。
如果您需要多态行为,则需要将该功能包装在单态类中:
即
struct MonomorphicWrapper : std::binary_function<Solution, Solution, bool>
{
bool operator()(const Solution& lhs, const Solution& rhs)
{
return lhs.compare(rhs);
}
};
答案 1 :(得分:1)
你应该使用std :: bind作为Comparator :: compare是实例方法,因此它需要一个Comparator对象作为参数。
类似的东西:
std::sort (...., std::bind (&Comparator::compare, comparator));