gpt4 book ai didi

c++ - 创建多个结构然后按元素排序

转载 作者:太空宇宙 更新时间:2023-11-04 13:11:27 26 4
gpt4 key购买 nike

所以我必须允许用户使用 5 种不同类型的信息创建一定数量的结构,然后根据其中一种类型进行排序。例如,他们会输入所有数据,然后按年级或姓名排序。我将如何着手在不同结构中创建仅包含不同名称或等级的数组?

#include <iostream>
#include <string>

struct student
{
std::string studentName;
std::string studentIDNumber;
int currentExamGrade;
int priorExamGrade;
double GPA;
};

void createStudent()
{
int numStudents;
std::cout << "Enter number of students\n";
std::cin >> numStudents;

while (numStudents > 0)
{
student name;

std::cout << "Enter the student's name\n";
std::cin >> name.studentName;

std::cout << "Enter the student's ID number\n";
std::cin >> name.studentIDNumber;

std::cout << "Enter the student's current exam grade\n";
std::cin >> name.currentExamGrade;

std::cout << "Enter the student's prior exam grade\n";
std::cin >> name.priorExamGrade;

std::cout << "Enter the student's GPA\n";
std::cin >> name.GPA;

numStudents -= 1;
}
}

int main()
{
createStudent();

int choice;
std::cout << "How do you want to sort the list?\n (Enter 1 for name, 2 for ID number, 3 for current exam grade, 4 for prior exam grade, 5 for GPA\n";
std::cin >> choice;

return 0;

}

最佳答案

好的。我假设您不知道 C++ 中的内置排序函数。看看std::sort()

接受输入:

input values into struct array + printing out

现在创建一个结构数组:

How do you make an array of structs in C?

Creating an array of structs in C++

现在对这些数组进行排序:

Sorting a vector of custom objects

如何解决这个问题:

std::sort()允许您根据可比较的非平凡对象提供自定义函数。一个这样的功能的例子是:

bool gpa_comparision_function (student s1,student s2)
{
return s1.GPA < s2.GPA;
}

它以需要通过排序函数进行比较的 2 个学生作为参数,并根据 GPA 返回学生 s1 和 s2 的排序。

这就是为什么声明 s1.GPA < s2.GPA很重要。

因此,如果学生 s1 的 GPA = 5.0 并且 s2 的 GPA = 4.0 我们希望顺序为 s2,s1(升序),因此此函数返回 false,说明 s2 应该在 s1 之前。

所以在排序函数的调用中:

sort (arr_of_students,arr_of_students+N,gpa_comparision_function);

注意第三个参数,gpa_comparision_function ,这是告诉内置函数使用我们的比较函数。

话不多说给我看代码:

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
struct student
{
std::string studentName;
std::string studentIDNumber;
int currentExamGrade;
int priorExamGrade;
double GPA;
};
bool gpa_comparision_function (student s1,student s2)
{
return s1.GPA < s2.GPA;
}
bool currentExamGrade_comparision_function (student s1,student s2)
{
return s1.currentExamGrade < s2.currentExamGrade;
}
int main ()
{
// Create an array of structs
student arr_of_students[100]; // A better way will be vector<student>

// Take input
// ...

// Now lets sort, assuming number of students is N
// Based on GPA
sort (arr_of_students,arr_of_students+N,gpa_comparision_function);

// Based on currentExamGrade
sort (arr_of_students,arr_of_students+N,currentExamGrade_comparision_function);

return 0;
}

关于c++ - 创建多个结构然后按元素排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39694759/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com