c++ - 如何将结构数组中的成员数据传递给函数?

标签 c++ arrays sorting data-structures parameters

编辑:这被标记为重复问题,但链接的问题不是我要问的。我知道如何将结构数组传递给函数。我正在寻求有关如何将成员数据从该数组中的元素传递到函数的帮助。

我有一个 C++ 家庭作业,我的任务是创建一个结构来跟踪学生的信息:

struct Student {
  string name;
  double idNumber;
  double currentGrade;
  double lastGrade;
  double overallGPA;
};

系统会提示用户输入他们将输入数据的学生人数,并根据此输入为其创建结构数组。然后,程序遍历每个元素,提示用户为结构的每个实例输入成员数据。

输入所有数据后,我的任务是根据用户选择的成员变量对数组进行排序。我已经编写了按名称变量排序的排序函数,并且编写了一个基于 double 变量对数组进行排序的通用函数,但我不确定如何只对所有四个 double 变量使用一个函数。

本质上,有什么方法可以使用这个函数:

void doubleSort(Student arr[], int arrSize) {
    // bubble sort: high -> low
    Student temp;
    for(int i = 0; i < arrSize; i++) {

        for(int j = 0; j < arrSize; j++) {

            if(arr[j] < arr[i]) {
                // swap values
                temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
        }
    }
}

但是将成员数据作为参数传递,即 idNumber,以避免为每个单独的成员变量编写排序函数?

最佳答案

不,你不能写一个通用的排序函数,你需要为每个字段都有比较函数,或者你需要通过发送一个更多的参数来跟踪你想要排序的成员,并在内部排序中检查which tag 比较哪个字段,然后交换。

最好的排序方式是对每个字段使用比较函数。

bool compareCurrentGrade (const Student & a, const Student & b) {
   return a.currentGrade < b.currentGrade;
}

然后使用#include <algorithm>中定义的排序函数

sort(studentarr, startoffset, endoffset, compareCurrentGrade);

了解更多关于排序的信息 See

如果你不想使用外部排序库模块那么你必须写 每个字段的排序函数。

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

相关文章:

MongoDB v2.4.9 按 bool 字段排序

python - 按顺序对要上传的文件列表进行排序

c++ - 在文字/常量模板参数中使用可变内容

c++ - 作为类私有(private)成员的无名结构/union

c++ - Qt QOpenGLWidget wheelEvent 奇怪的行为

c++ - 后构造函数初始化

javascript - 替换 Javascript 字符串数组中的最后一个字母

两个数组的 Javascript Concat 值

java - ArrayList 与数组和列表的比较

java - 链接两个数组并将它们排序在一起