虚拟方法作为Comp函数进行排序

时间:2010-04-26 15:02:47

标签: c++ sorting stl comparison

我是C ++的新手,我正在尝试使用std :: sort函数对解决方案的矢量进行排序。

代码是这样的(解决方案列表是*向量):

void SolutionSet::sort(Comparator &comparator) {

 std::sort(solutionsList_->begin(), solutionsList_->end(), &comparator::compare);

}

比较器参数是Comparator的子类实例,比较方法在Comparator类中是虚拟的,并由所有Comparator的子类实现。

我想在std:sort()中使用该函数作为比较器函数。

这可能吗?

如果是,有人可以告诉我怎么样?因为使用前面的代码,它不起作用。

如果我没有说清楚,请问问!

谢谢你们!

2 个答案:

答案 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));