c++ - 如何对类数组进行排序?
问题描述
我已经使类具有二维数组(4 x 4)和二维数组中的最大值,如下所示:
class B {
public:
int shape[4][4] = { 0 };
int maxh = 0;
B() {};
void record(int module[4][4]) {
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
shape[i][j] = module[i][j];
if (shape[i][j] > maxh) { maxh = shape[i][j]; }
}
}
}
};
如果有一个“B”类数组,
B b_arr = new B[30000];
如何按最大值对类对象数组进行排序?
我试图像下面的代码那样对数组进行排序,但出现堆栈溢出错误。
int partition(B arr[], int p, int r) {
int i = p - 1;
for (int j = p; j < r; j++) {
int cri = arr[r].maxh;
if (arr[j].maxh < cri) {
i++;
B tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
B tmp = arr[i + 1];
arr[i + 1] = arr[r];
arr[r] = tmp;
return i + 1;
}
void quickSort(B arr[], int p, int r) {
if (p < r) {
int q = partition(arr, p, r);
quickSort(arr, p, q - 1);
quickSort(arr, q + 1, r);
}
}
解决方案
std::qsort
如果为类对象定义比较器函数,则可以使用:
int bArrCompare(const void* a, const void* b) {
const B* pa = reinterpret_cast<const B*>(a);
const B* pb = reinterpret_cast<const B*>(b);
return (pb->maxh - pa->maxh);
}
int main()
{
B* b_arr = new B[30000];
//...
std::qsort(b_arr, 30000, sizeof(B), bArrCompare);
//...
return 0;
}
推荐阅读
- docker - 有没有办法在单个 ADD/COPY 命令(dockerfile)中添加/复制目录和文件?
- html - 带有列表的嵌套下拉菜单
- kotlin - 如果条件为真kotlin如何调用函数?
- typescript - Typescript 抛出“错误 TS2554:预期 2 个参数,但得到 1 个。” 错误
- r - R:绘图 - 从多个数据帧中可视化 24 小时时间范围内事件的共同时间段
- python - 如何确保图例不与右侧 Y 轴上的标签重叠
- swiftui - 有没有办法获取包含 SwiftUI 中内容的 ScrollView 的高度?
- node.js - 车把未加载本地 css 文件
- jpa - 强制 JPA 从数据库重新加载实体
- flutter - 是否可以自动生成 GlobalKey?