首页 > 后端开发 > C++ > 如何在 C `std::sort` 中使用成员函数作为比较器?

如何在 C `std::sort` 中使用成员函数作为比较器?

Mary-Kate Olsen
发布: 2024-12-02 18:00:21
原创
461 人浏览过

How Can I Use a Member Function as a Comparator in C   `std::sort`?

实现用于排序的成员函数比较器

在 C 中,对集合进行排序需要比较器函数。尝试使用成员函数作为比较器可能会导致编译错误。

问题

考虑以下类:

class MyClass {
    int * arr;
    // ...

    doCompare( const int & i1, const int & i2 ) { // uses member variables } 

    doSort() { std::sort(arr,arr+someSize, &doCompare); }
};
登录后复制

编译此代码可能会生成错误:

ISO C 禁止获取地址不合格或带括号的非静态成员函数形成指向成员函数的指针。

解决方案

要解决此问题,一种方法是使 doCompare 成为静态成员函数。但是,如果 doCompare 需要访问 MyClass 数据,您可以将 MyClass 转换为比较函子。

这可以通过将:

doCompare( const int & i1, const int & i2 ) { // use some member variables }
登录后复制

更改为:

bool operator () ( const int & i1, const int & i2 ) { // use member variables }
登录后复制
然后,调用排序函数,如下所示:

doSort() { std::sort(arr, arr+someSize, *this); }
登录后复制
此外, doSort 方法应该返回一个值,例如 void。

另一种选择是将成员函数包装在类中,如以下示例所示:

以上是如何在 C `std::sort` 中使用成员函数作为比较器?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板