在使用std::sort
函数时,如果传递的是一个自定义的比较函数,并且这个比较函数是一个类的非静态成员函数,那么会出现错误:“必须调用对非静态成员函数的引用”。这是因为非静态成员函数需要一个隐含的this
指针来指向调用该成员函数的对象实例。
this
指针。当传递一个非静态成员函数作为比较函数时,std::sort
无法正确地调用这个函数,因为它不知道如何传递this
指针。
#include <iostream>
#include <vector>
#include <algorithm>
class MyClass {
public:
int value;
MyClass(int v) : value(v) {}
};
int main() {
std::vector<MyClass> vec = {MyClass(3), MyClass(1), MyClass(2)};
std::sort(vec.begin(), vec.end(), [](const MyClass& a, const MyClass& b) {
return a.value < b.value;
});
for (const auto& obj : vec) {
std::cout << obj.value << " ";
}
return 0;
}
#include <iostream>
#include <vector>
#include <algorithm>
class MyClass {
public:
int value;
MyClass(int v) : value(v) {}
};
struct Compare {
bool operator()(const MyClass& a, const MyClass& b) const {
return a.value < b.value;
}
};
int main() {
std::vector<MyClass> vec = {MyClass(3), MyClass(1), MyClass(2)};
std::sort(vec.begin(), vec.end(), Compare());
for (const auto& obj : vec) {
std::cout << obj.value << " ";
}
return 0;
}
通过上述方法,可以解决传递非静态成员函数给std::sort
时出现的错误。
领取专属 10元无门槛券
手把手带您无忧上云