如何使用结构实例的名称调用其属性

How to call properties of a struct instance with it's names

本文关键字:调用 属性 何使用 结构 实例      更新时间:2023-10-16

我有一个名为informations的结构,

struct informations {
char no[12];
char name[16];
int exam1, exam2;
float result;
char letter[3];
}

我正在将学生的信息存储在文件中。我可以读/写文件和其他东西。我想根据结构具有的所有属性(在这种情况下,["no","name","exam1","expam2","result","letter"])对所有学生(信息结构的实例)进行排序

我有一个排序函数,它对一个属性进行排序,如下所示:

for(int i = 0; i < 99; i++) {
for(int o = 0; o < 99; o++) {
if(students[i].result > students[i + 1].result) {
container = students[i];
students[i] = students[i + 1];
students[i + 1] = container;
}
}
}

上面的代码适用于按结果属性对所有学生进行排序,但我希望按所有属性对学生进行不同的排序,而不重复上面所有属性的代码。我有这样的想法,但我不知道如何将这些想法应用到代码中,

  1. 将所有结构属性存储在数组中,

    string properties[6] = ["no", "name", "exam1", "exam2", "result", "letter"];

  2. 在属性数组上迭代,

  3. 在迭代循环中,通过迭代属性使用上述排序函数

感谢您的帮助!

很抱歉,但如果没有反射(C++没有),这不是一件小事。

您可以通过从二次型实现切换到std::sort来减少重复,然后为每个排序标准编写一组比较器。这些应该像return student.result < student.result一样简单,其中result是您想要比较的任何成员(尽管这对于数组和C字符串来说更复杂!)。