gpt4 book ai didi

c++ - 在其他函数中对结构 vector 和 vector 部分进行排序?

转载 作者:太空宇宙 更新时间:2023-11-04 14:20:31 25 4
gpt4 key购买 nike

我有一个 vectorstructs。我需要根据students vector 中每个struct 中学生的姓氏按字母顺序对 vector 进行排序。这可能吗? struct 中的每个学生都有以下信息:

struct Student
{
string lastName;
string firstName;
string stdNumber;
double assgn1;//doubles are what I want to add in another function.
double assign2;
double assign3;
double assign4;
double midTerm;
double finalGrade;

bool operator<(Student const &other) const {
return lastName < other.lastName;
}
};

这是制作和填充我的students vector 的地方:

int getFileInfo()
{
int failed=0;
ifstream fin;
string fileName;
vector<Student> students;// A place to store the list of students
Student s; // A place to store data of one student
cout<<"Please enter the filename of the student grades (ex. filename_1.txt)."<<endl;
do{
if(failed>=1)
cout<<"Please enter a correct filename."<<endl;
cin>>fileName;
fin.open(fileName.c_str());// Open the file
failed++;
}while(!fin.good());
while (fin >> s.firstName >> s.lastName >> s.stdNumber){
cout<<"Reading "<<s.firstName<<" "<<s.lastName<<" "<<s.stdNumber<<endl;
students.push_back(s);
}
vector<Student>::iterator loop = students.begin();
vector<Student>::iterator end = students.end();
fin.close();

return 0;
}

所以我想根据姓氏对 struct 进行排序,然后能够在 ANOTHER FUNCTION 中操作 vector 中的每个 “Student”struct`。这可能吗?

我希望能够将 double 部分添加到我在另一个函数中拥有的 vector 中的每个学生。然后我希望能够打印出每个学生的所有信息。如果我在 students vector 所在的函数中执行此操作,我可以打印出每个学生的信息,但我需要在另一个函数中打印,void gradeInput() .我将 cin>> 每个学生的每个 double 成绩,一次一个学生。我在想它看起来像这样:

void gradeInput()
{
For(each student)// I don’t know what to do to in this for loop to loop through
//each student. I want to make it so everywhere “stud” is change to the
//next student after one loop iteration.

//I made a default `Student` called ‘stud’ to show this example..
cout<<"Student "<<stud.firstName<<" "<<stud.lastName<<" "<<stud.stdNumber<<":";
cout<<"Please, enter a grade (between 0.0 and 100.0) for ... "<<endl;
cout<<"Assignment 1:";
cin>>stud.assgn1;
cout<<endl;
cout<<"Assignment 2:";
cin>>stud.assign2;
cout<<endl;
cout<<"Assignment 3:";
cin>>stud.assign3;
cout<<endl;
cout<<"Assignment 4: ";
cin>>stud.assign4;
cout<<endl;
cout<<"MidTerm: ";
cin>>stud.midTerm;
cout<<endl;
cout<<"Final Exam: ";
cin>>stud.finalGrade;
cout<<endl;

return;
}

希望这是有道理的,我能得到一些帮助!我的老师对我帮助不大,因为她不回复电子邮件,而且有 45 分钟的办公时间,所以你们所有友好的人都是一笔宝贵的财富!谢谢!
附言抱歉,代码格式不佳,我仍在尝试找出网站的代码输入。

最佳答案

让排序工作非常简单——只需定义一个 operator<对于那种类型:

class student {
// ...

bool operator<(student const &other) const {
return last_name < other.last_name;
}
};

请注意,您可能希望(例如)使用学生的名字作为次要排序字段,仅当/如果姓氏相同时才使用。

就读取学生数据而言,您通常希望在名为 operator>> 的函数中执行此操作,比如:

std::istream &operator>>(std::istream &is, student &s) { 
is >> student.last_name;
is >> student.first_name;
// read other fields;
return is;
}

如果合理的话,我会避免像您那样使条目具有交互性。虽然在学生作业中很常见,但它使程序几乎无法使用。打印信息通常使用 operator<< 完成。 , 本质上是 operator>> 的镜像(即,它写入而不是读取,但应该以相同的顺序写入字段,格式为 operator>> 可以读取)。

关于c++ - 在其他函数中对结构 vector 和 vector 部分进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7962702/

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