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

use*_*092 4 c++ sorting comparison stl

我是C++的新手,我正在尝试使用std :: sort函数对Solutions的矢量进行排序.

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

void SolutionSet::sort(Comparator &comparator) {

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

}
Run Code Online (Sandbox Code Playgroud)

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

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

这可能吗?

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

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

感谢你们!

Bil*_*eal 5

STL仿函数需要是单态的,因为STL仿函数是按值传递.

如果需要多态行为,则需要将该功能包装在单态类中:

struct MonomorphicWrapper : std::binary_function<Solution, Solution, bool>
{
    bool operator()(const Solution& lhs, const Solution& rhs)
    {
        return lhs.compare(rhs);
    }
};
Run Code Online (Sandbox Code Playgroud)