代码任务:对map的value进行sort
代码如下:
class Solution {
public:
bool cmp(const pair<int, int>& a, const pair<int, int>& b)
{
return a.second > b.second;
}
vector<int> topKFrequent(vector<int>& nums, int k) {
map<int,int> numMap;
for(int i=0; i<nums.size(); i++)
numMap[nums[i]]++;
vector<pair<int,int>> mapVec(numMap.begin(), numMap.end());
sort(mapVec.begin(), mapVec.end(), cmp);
vector<int> res;
for(int i=0; i<k; i++)
res.push_back(mapVec[i].first);
return res;
}
};
遇到问题:
Line 13: Char 44: error: reference to non-static member function must be called
sort(mapVec.begin(), mapVec.end(), cmp);
^~~
1 error generated.
错误原因:
sort函数第三个参数可选填,且sort函数的第三个参数不允许有指针参数。
类中如果成员函数没有声明为static,c++会默认给成员函数添加一个this指针。
所以:将cmp函数声明为static成员函数即可,或者写在类外面。改正如下:
class Solution {
public:
static bool cmp(const pair<int, int>& a, const pair<int, int>& b)
{
return a.second > b.second;
}
vector<int> topKFrequent(vector<int>& nums, int k) {
map<int,int> numMap;
for(int i=0; i<nums.size(); i++)
numMap[nums[i]]++;
vector<pair<int,int>> mapVec(numMap.begin(), numMap.end());
sort(mapVec.begin(), mapVec.end(), cmp);
vector<int> res;
for(int i=0; i<k; i++)
res.push_back(mapVec[i].first);
return res;
}
};