C 使用单个函数对具有多种值类型的数组排序

C++ Sorting an array with multiple value types using a single function

本文关键字:类型 数组排序 单个 函数      更新时间:2023-10-16

我有一系列记录对象,每个记录都存储一个学生的名字,姓氏,GPA,电子邮件和ID。我需要创建一个可以根据其任何字段对记录进行分类的功能。但是,我遇到了麻烦,因为不同的值具有不同的变量类型(int,string,double(。有没有办法决定将数组的哪个值传递给排序函数?

我尝试创建模板,枚举和其他东西。但是,即使使用模板类功能,我可以指出传递的值类型,例如,我仍然不能仅将名字或GPA传递给它。即使使用模板函数,我也需要在该函数中使用记录[i] .gpa,以便它比较GPA。我的讲师说,我们需要一个可以比较其中任何一个的函数,并且我们不能将粘贴函数复制为不同值的粘贴函数,即记录的分类函数[]。firstName for rostrods []。也不允许使用#include<algorithm>

基本上,我需要能够传递一个是对象数组的一部分的独特变量,并使排序函数对所选变量上传递的对象进行排序。我对编程非常陌生,因此请感谢任何帮助。

您应该使用C 的标准排序功能std::sort,在<algorithm>标题中使用用户定义的谓词声明。

这是一个示例:

struct A{
      int a1;
      int a2;
      string a3;
};
bool predicate(A const& lhs, A const& rhs) {
    if (lhs.a1 != rhs.a1)
        return lhs.a1 < rhs.a1;
    if (lhs.a2 != rhs.a2)
        return lhs.a2 < rhs.a2;
    return lhs.a3 < rhs.a3;
}

或@max建议您可以使用std::tie

bool predicate(A const& lhs, A const& rhs) {
        return std::tie(lhs.a1, lhs.a2, lhs.a3) < std::tie(rhs.a1, rhs.a2, rhs.a3);
    }

现在,将该功能传递给您的sort调用:

std::sort(vectorA.begin(), vectorA.end(), & predicate);

或从较旧问题的排序功能:

template <class  T>
void sortArray(T record[]) {
    bool swap = true;
    while (swap) {
        swap = false;
        for (size_t i = 0; i < arraySize - 1; i++) {
            if (predicate(record[i] ,record[i + 1])) {
                T temp = record[i];
                record[i] = record[i + 1];
                record[i + 1] = temp;
                swap = true;
            }
        }
    }
}