c++ - 如何将结构体成员数组作为参数传递给函数?

标签 c++ arrays struct

这是我的问题: 我有一个结构:

struct point
{
    int x;
    int y;
};

然后我有一个数组:

for (int i = 0;i < n;i++)
{
    arr[i].x=rand() % n + 1;
}

我定义了quicksort函数如下:

 void quicksort(int *a, int left, int right);

并且我想按 X 坐标对点进行排序,因此我调用 quicksort:

quicksort(arr.x, 0, n-1);

这是错误消息:

error: request for member 'x' in 'arr', which is of non-class type 'point [(((unsigned int)(((int)n) + -0x000000001)) + 1)]'

抱歉,如果问题太愚蠢或表述得不好,事实是我是新手,我真的愿意尽可能多地学习,我将非常感谢您的帮助!

最佳答案

如果你总是想按x排序,那么你可以将其硬编码到排序函数中,只需传递一个指向数组的指针即可进行排序:

void quicksort(point * arr, int left, int right) {
    // test points with 
    // if (arr[i].x < arr[j].x) {/* i sorts before j */}
}

quicksort(arr, 0, n-1);

要指定排序依据的类成员,您需要一个指向成员的指针,而不是指针;像这样:

void quicksort(point * arr, int point::*member, int left, int right){
    // test points with 
    // if (arr[i].*member < arr[j].*member) {/* i sorts before j */}
}

quicksort(arr, &point::x, 0, n-1);

更一般地说,您可以遵循 std::sort 的示例并接受任何比较仿函数:

template <typename RandIter, typename Compare>
void quicksort(RandIter begin, RandIter end, Compare compare) {
    // test points with 
    // if (compare(*it1, *it2)) {/* *it1 sorts before *it2 */}
}

quicksort(arr, arr+n, 
    [](point const &lhs, point const &rhs) {return lhs.x < rhs.x;});

当然,除非您正在学习如何实现排序算法,否则只需使用 std::sort

关于c++ - 如何将结构体成员数组作为参数传递给函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18963272/

相关文章:

c - 如何将已排序的结构返回到我的主函数?

c++ - 对于C++,在另一个函数中定义一个函数的可行性规则是什么?

Java Swing ImageIcon 数组 setIcon 仅显示最后一个图像

javascript - ajax post后用服务器的值更新原始对象

c# - 为什么结构的字段在 using 语句后被重置?

c++删除结构数组中的元素

c++ - Visual Studio : some projects in solution don't generate . exe文件

c++ - 给定一个整数 N,按字典顺序打印从 1 到 N 的数字

c++ - Z-Buffer 的高效实现

java - XLLoop (Excel 2010) - 集成返回数组/值列表的 java 函数