gpt4 book ai didi

c++ - 如何对类数组进行排序?

转载 作者:行者123 更新时间:2023-11-27 22:32:50 26 4
gpt4 key购买 nike

我已经使类具有 2d 数组 (4 x 4) 和 2d 数组中的最大值,如下所示:

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::sort() 定义比较器:

请看下面的原型(prototype):

template< class RandomIt, class Compare >
void sort( RandomIt first, RandomIt last, Compare comp );

例如你可以这样做:

std::sort(
/*std::begin(b_arr)*/b_arr,
/*std::end(b_arr)*/b_arr+30000,
[](const B& left, const B& right){
return left.maxh < right.maxh;
}
);

请注意,std::begin()std::end() 不适用于指向动态数组的指针。在这种情况下,您必须通过添加大小来指定范围。我建议改用 std::vectorstd::array

关于c++ - 如何对类数组进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58782711/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com