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

标签 c++ sorting stl comparison

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

代码是这样的(解决方案列表是一个* vector ):

void SolutionSet::sort(Comparator &comparator) {

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

}

comparator 参数是 Comparator 的子类实例,compare 方法在 Comparator 类中是虚拟的,由 Comparator 的所有子类实现。

我想将该函数用作 std:sort() 中的比较器函数。

这可能吗?

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

如果我没说清楚,请问!

谢谢大家!

最佳答案

STL 仿函数必须是单态的,因为 STL 仿函数是按值传递的。

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

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

关于c++ - 虚拟方法作为 Comp 函数进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2714489/

相关文章:

java - 如何将 tcp 套接字上的 java byte[] 发送到服务器上的 c++ char[]?

c++ - 在 Qt 应用程序中包含 adb

c++ - 计算光线追踪器光线 - vector 会聚到相同的输出

sorting - 使用脚本对具有多个条件的 Google 电子表格进行排序

c++ - 用于插入的指针包装器

c++ - STL映射插入拷贝构造函数

c++ - 如何在 C++ 中创建一组无序的整数对?

mysql - 对 "ORDER BY"查询的顺序进行排序

algorithm - 如何排列具有相同属性值的对象数组?

c++ - 如何使 std::map 比较以处理多种数据类型?