因此,我一直在尝试根据字符频率对字符串进行排序。但是我一直在使用的在线法官向我显示错误
Line 17: invalid use of non-static member function 'bool olution::helper(char, char)'
为什么我的函数调用错误?我以前使用过sort()
函数,但没有使用过字符串。我的helper()
函数不正确吗?
class Solution {
public:
unordered_map<char,int> freq;
bool helper(char c1,char c2){
if(freq[c1]>freq[c2]) return false;
else return true;
}
string frequencySort(string s) {
for(char c:s)
{
freq[c]++;
}
sort(s.begin(),s.end(),helper);
return s;
}
};
答案 0 :(得分:1)
使用Lambda捕获this
:
sort(s.begin(),s.end(),[this](auto a, auto b) -> bool { return helper(a,b); });
答案 1 :(得分:0)
为什么我的函数调用错误?我已经使用了sort()函数 之前,但不是字符串。我的'helper()'函数不正确吗?
因为助手是解决方案的成员函数。当您这样做
sort(s.begin(),s.end(),helper);
您基本上是这样做的
sort(s.begin(),s.end(),this->helper);
要排序的第三个参数必须是独立函数,谓词,函子或lambda。它不能是类的非静态成员
此代码经过清理后可以正常工作。注意静态信息
class Solution {
public:
// using thread_local so that each thread
// has its own global variable.
static thread_local std::unordered_map<char, int> freq;
static bool helper(char c1, char c2) {
return (freq[c1]<freq[c2]);
}
std::string frequencySort(std::string s)
{
freq.clear();
for (char c : s)
++freq[c];
std::sort(s.begin(), s.end(), helper);
return s;
}
};
// definition
std::unordered_map<char, int> Solution::freq;
答案 2 :(得分:0)
成员函数的隐藏参数变为this
。您需要更广泛地公开状态,或者编写捕获的lambda
如果您将一个值与其自身进行比较,则Compare谓词也必须返回false,而您的不是。
class Solution {
public:
string frequencySort(string s) {
unordered_map<char,int> freq;
for(char c:s)
{
freq[c]++;
}
sort(s.begin(),s.end(),[&freq](char lhs, char rhs){ return freq[lhs] < freq[rhs]; });
return s;
}
};