我正在尝试按年龄对学生进行排序。
到目前为止,我所做的只是对年龄进行排序,而没有完整的数据(姓名,年级等)。
#include <iostream>
#include <fstream>
#include <algorithm>
#include <string.h>
using namespace std;
struct students {
char l_name[30];
char f_name[30];
int age;
int grade;
float height;
};
students student[100];
void sort_age()
{
int aux[100], i;
sort(student.age, student.age + nr_students); //I know this is wrong..
cout << "Showing students..." << endl;
if (nr_students == 0)
{
cout << "No students registred!" << endl;
cout << "Select option ""'4'"" to register some students!" << endl;
}
for(int i = 0; i < nr_students; i++)
{
cout << "Student: "<<student[i].l_name << " ";
cout << student[i].f_name << ", ";
cout << "Age: "<<student[i].age << " y.o, ";
cout << "Height: "<<student[i].height << "cm, ";
cout << "Grade: "<<student[i].grade << " grade" <<endl;
}
cout << endl;
}
我希望学生按年龄分类。
答案 0 :(得分:2)
#!/bin/bash
if [ ! -s $1 ]
then
rm -rf $1
elif [ -f -s $1 ]
then
continue
else [ "$1" -eq 0 ] then #this is line 9
printf "Null"
exit
fi
注意:通用lambda(具有std::sort(student, student + nr_students, [](const auto& s1, const auto& s2){
return s1.age < s2.age; });
作为参数类型)是C ++ 14的功能。如果将lambda指定为auto
,则它将与C ++ 11标准一起使用,或者您可以像在Faruk的答案中那样对C ++ 11之前的编译器使用函数指针。
您还可以为您的班级提供[](const students& s1, const students& s2){/*body*/}
的重载,但是并非总是希望按年龄对它们进行排序。那时可能会很混乱。
operator <
作为旁注,您应该使用bool operator< (const students& s1, const students& s2)
{
return s1.age < s2.age;
}
。它可以为您处理大量元素,并且可以根据您的需要调整大小。
另外,为什么还要命名类std::vector
并将100个students
的数组命名为students
?
答案 1 :(得分:1)
首先,您需要编写一个compare函数,然后让内置的sort函数知道如何根据该函数对数组进行排序。
students student[100];
bool cmp(students A, students B) {
return A.age < B.age;
}
// inside of sort_age() function
sort(student, student + nr_students, cmp);