C 使用单个函数对具有多种值类型的数组排序
C++ Sorting an array with multiple value types using a single function
我有一系列记录对象,每个记录都存储一个学生的名字,姓氏,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;
}
}
}
}
相关文章:
- 显示错误输出的简单数组排序程序
- C++默认情况下,指针类型数组的元素是否保证初始化为 nullptr?
- 类型数组?
- 如何在使用 make_unique<T[]>() 制作的模板类型数组上使用 std::fill?
- 将基本类型数组中的内存重新用于不同(但仍然是基本)类型的数组合法吗
- 在C++中返回基元类型数组(Java比较)
- 如何返回 QVariant 类型数组
- 如何在本机 c++ jni 中实现 java 类型数组
- 模板类型数组的模板类型数组
- C 使用单个函数对具有多种值类型的数组排序
- 2D数组排序,空格打乱顺序
- 如何确定未知类型数组的索引是否为空
- C 2D数组排序
- 复杂类型数组的静态初始化
- C++数组排序 - 将"bbba"和"0001"视为不正确排序的问题
- 数组排序功能
- 访问基类型数组成员(Int-to-type习惯用法)
- 如何将 char 类型数组传递给函数并将第一个字符数组复制到第二个图表数组并使用 c++ 进行比较
- 如何在C 中制作结构类型数组
- 如何创建结构类型数组的地图对象