我已经重载了()运算符来为我做比较,我想把它作为比较器发送到std sort函数调用的第三个参数。现在,此调用位于另一个名为threeSum
的成员函数中。我发现发送Solution()
有效但this()
无法正常工作。这有什么语法规则?
class Solution
{
public:
bool operator() (int i, int j)
{
return (i < j);
}
vector<vector<int> > threeSum(vector<int> & nums)
{
sort(nums.begin(), nums.end(), this());
vector<vector<int> > ret_vec;
...
return ret_vec;
}
};
谢谢。
答案 0 :(得分:1)
{
"name": "cordova-plugin-splashscreen",
"version": "4.0.0",
"description": "Cordova Splashscreen Plugin",
"cordova": {
"id": "cordova-plugin-splashscreen",
"platforms": [
"android",
"amazon-fireos",
"ubuntu",
"ios",
"blackberry10",
"wp8",
"windows8",
"windows",
"tizen"
]
},
不起作用的原因是因为this()
是一个指针。你需要先取消引用它。
this
在你的情况下,你应该这样写:
(*this)(args);
或者,如果你想更明确:
sort(nums.begin(), nums.end(), (*this));
答案 1 :(得分:1)
非静态成员函数(包括任何函子)需要包含对象的地址作为其隐式参数。你可以使用lambda函数来实现这个效果:
vector<vector<int> > threeSum(vector<int> & nums)
{
auto mysort = [this](int i, int j) {
return operator()(i, j);
};
sort(nums.begin(), nums.end(), mysort);
...
}
这里lambda函数mysort
捕获包含对象(this
)的运行时地址,并将其用作operator()
的隐式参数,现在可以由std::sort
使用{1}}。
编辑:此方法不仅适用于仿函数,也适用于其他成员函数。但是如果你只想使用仿函数进行排序,那么直接提供(*this)
作为sort
的第三个参数的另一个答案可能会稍微提高效率。