力扣451

来源:4-3 set和map不同底层实现的区别

慕哥6157257

2021-05-14

波波老师,麻烦您看下我的程序。利用结构体排序,sort函数为什么不通呢,之前也是这么写的。
class Solution {
public:
struct node {
char id;
int fre;
}a[100];
bool cmp(node a1, node a2) {
return a1.fre >= a2.fre;
}
string frequencySort(string s) {
string ans;
unordered_map<char, int> map1;
for (char x : s) {
map1[x]++;
}
int cnt = 0;
for (auto x : map1) //从map结构中取出,以结构体的形式存取
{
a[cnt].id = x.first;
a[cnt++].fre = x.second;
}
sort(a, a+cnt, cmp);//这里报错,但我不知道为什么?
for (int i = 0; i < cnt; i++) {
for (int j = 0; j < a[cnt].fre; j++) {
ans.push_back(a[cnt].id);
}
}
return ans;
}
};

写回答

1回答

liuyubobobo

2021-05-15

cmp 是成员方法。成员方法的调用必须是:实例.成员方法。但是你将 cmp 传入 sort 是没有具体的 cmp 的实例的。


将 cmp 设置为 static 即可。


继续加油。

0
2
liuyubobobo
回复
慕哥6157257
没有特别懂你的问题?你的这段程序,bool cmp(node a1, node a2) 前面加一个 static 就可以执行了。更简单的处理方式是将 node 和 cmp 放到 Solution 外面,让他们不是 Solution 内部的成员;更合理的方式是对 node 重载 <,也就是这个比较是和 node 相关的,比较的定义应该放在 node 内部。可以参考我这个课程中对 Student 类的定义:https://github.com/liuyubobobo/Play-with-Algorithms/blob/master/02-Sorting-Basic/Course%20Code%20(C%2B%2B)/02-Selection-Sort-Using-Template/Student.h
2021-05-15
共2条回复

玩转算法面试-- Leetcode真题分门别类讲解

课程配套大量BAT面试真题,高频算法题解析,强化训练

7408 学习 · 1150 问题

查看课程

相似问题