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

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

Linda Hamilton
Linda Hamilton原创
2024-12-03 11:03:13882浏览

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

成员函数作为问题排序中的比较器

尝试使用提供的代码时,编译器会引发错误,禁止检索不合格的地址或带括号的非静态成员函数以形成指向成员函数的指针。该问题源于 doCompare 成员函数的非静态定义。

要解决此问题,需要将 doCompare 声明为静态。但是,如果函数需要访问 MyClass 中的数据,则可以通过更改 doCompare from:

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

To:

bool operator () ( const int & i1, const int & i2 ) { // use some member variables }

doSort 方法,将该类转换为比较函子然后应该使用以下语法调用比较函数:

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

或者,可以利用std::mem_fun 将成员函数转换为自由函数。但是,由于 std::sort 按值接受比较函数,因此建议将该函数包装在类本身中。采用这种方法的修改后的代码如下所示:

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)); }
}

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

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