首页 > 后端开发 > C++ > 如何正确使用C中的成员函数进行排序?

如何正确使用C中的成员函数进行排序?

Patricia Arquette
发布: 2024-12-08 22:17:14
原创
893 人浏览过

How to Correctly Use Member Functions for Sorting in C  ?

成员函数作为排序的比较

使用成员函数作为排序的比较条件时,由于以下限制,可能会出现编译错误ISO C 标准。该标准禁止直接寻址未限定的或带括号的非静态成员函数来派生指向成员函数的指针。尝试对类中的数组进行排序时可能会遇到此类错误。

要解决此问题,一种解决方案是将比较函数 doCompare 声明为静态。但是,如果该函数依赖于 MyClass 实例中的数据,则另一种方法是将类转换为比较函子。这涉及修改 doCompare 以实现operator() 函数并调用 std::sort,如下所示:

1

doSort() { std::sort(arr,arr+someSize, *this); }

登录后复制

此外,值得考虑 doSort 方法中缺少的返回值。对于完整的实现,它应该类似于:

1

int* doSort() { std::sort(arr,arr+someSize, &doCompare); return arr; }

登录后复制

或者,可以使用 std::mem_fun 和绑定将成员函数转换为自由函数。另一种选择是将函数嵌入到类中,如以下代码片段所示:

1

2

3

4

5

6

7

8

class MyClass {

   struct Less {

       Less(const MyClass& c) : myClass(c) {}

       bool operator () ( const int & i1, const int & i2 ) {// use 'myClass'}

       MyClass& myClass;

   };

   doSort() { std::sort(arr,arr+someSize, Less(*this)); }

};

登录后复制

通过选择这些方法中的任何一种,开发人员可以使用成员函数成功处理类中数组的排序作为比较标准。

以上是如何正确使用C中的成员函数进行排序?的详细内容。更多信息请关注PHP中文网其他相关文章!

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