如何将成员数据从结构数组传递到函数中?

时间:2016-09-21 17:51:04

标签: c++ arrays sorting data-structures parameters

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

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

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

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

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

基本上,有没有办法可以使用这个功能:

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)传递?

1 个答案:

答案 0 :(得分:0)

否您无法编写单个通用函数进行排序,您需要为每个字段设置比较函数,或者您需要通过发送一个参数和内部排序来跟踪要排序的成员检查哪个标签要比较哪个字段然后交换。

排序每个字段使用比较功能的最佳方法。

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

然后使用#include <algorithm>

中定义的排序函数
sort(studentarr, startoffset, endoffset, compareCurrentGrade);

了解有关排序See

的更多信息

如果您不想使用外部排序库模块,那么您必须编写 每个字段排序功能。