如何在数据结构中按年龄对学生进行排序

时间:2018-12-24 16:54:20

标签: c++ sorting

我正在尝试按年龄对学生进行排序。

到目前为止,我所做的只是对年龄进行排序,而没有完整的数据(姓名,年级等)。

#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;
}

我希望学生按年龄分类。

2 个答案:

答案 0 :(得分:2)

std::sort

助您使用标准库
#!/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);