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

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

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-02 18:00:21452浏览

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn