实现用于排序的成员函数比较器
在 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中文网其他相关文章!