C++中,如何将结构数组里面一个成员拿出来排序?

struct student
{
int num;
char name[20];
char sex;
int grade;
};
void main()
{
int i;
float ave, sum = 0;
struct student stu[5];
for (i = 0; i < 5; i++)
{
cout << "请依次输入学生" << i+1 << "的学号、姓名、性别、成绩" << endl;
cin >> stu[i].num >> stu[i].name >> stu[i].sex >> stu[i].grade;
}}

如题:如何将其中5个成员grade拿出来进行排序?
已经弄了冒泡排序法的函数,但是不知道用不用的着,调用函数时候有错误
void bubble(int [], int);

void bubble(int a[], int size)

{
int i, temp;
for (int pass = 1; pass < size; pass++)
{
for(i=0;i if (a[i] > a[i + 1])
{
temp = a[i];
a[i] = a[i + 1];
a[i + 1] = temp;
}
for (i = 0; i < size; i++)
cout << a[i] << ",";
cout << endl;
}
}

前段时间帮同学写了个选课的系统,里面也涉及结构排序,这是给同学写的简易的代码

void CourseMange::SortCourse()
{
    for (int i = m_vCourseArray.size() - 1; i >= 0; --i)
    {
        for (int j = 0; j < i; j++)
        {
            if (m_vCourseArray[j].id > m_vCourseArray[j + 1].id)
                swap(m_vCourseArray[j], m_vCourseArray[j + 1]);
        }
    }
}

如果你是要将每个成员根据grade进行排序的话,你可以先进行比对一下,你的冒泡排序里的if条件语句进行大小比较的时候,应该取出每一个结构中的grade进行比较大小

代码如下

void bubble(struct student a[], int size)
{
    for (int pass = 0; pass < size; pass++)
    {
        for(int i = 0; i < pass; ++i) 
        {
            if (a[i].grade > a[i + 1].grade)
            {
                swap(a[i], a[i+1]);
            }
        }
    }

    for (i = 0; i < size; i++)
    {
        cout << a[i].grade << ",";
    }
    cout << endl;
}

如果你只是想取出5个成员中grade拿出来进行排序

由于你设计的冒泡排序中传入的是数组,我将每个成员的grade放入到另一个数组中,进行传参

代码如下

#include <iostream>
using namespace std;

struct student
{
    int num;
    char name[20];
    char sex;
    int grade;
};

void bubble(int a[], int);

int main()
{
    int i;
    float ave, sum = 0;
    struct student stu[5];
    for (i = 0; i < 5; i++)
    {
        cout << "请依次输入学生" << i+1 << "的学号、姓名、性别、成绩" << endl;
        cin >> stu[i].num >> stu[i].name >> stu[i].sex >> stu[i].grade;
    }

    int* array = new int[5];
    for(int i = 0; i < 5; ++i)
    {
        array[i] = stu[i].grade;
    }
    bubble(array, 5);
    return 0;
}

void bubble(int a[], int size)
{
    int i, temp;
    for (int pass = 0; pass < size; pass++)
    {
        for(i=0; i < pass; ++i) 
        {
            if (a[i] > a[i + 1])
            {
                temp = a[i];
                a[i] = a[i + 1];
                a[i + 1] = temp;
            }
        }
    }
    for (i = 0; i < size; i++)
    {
        cout << a[i] << ",";
    }
    cout << endl;
}

sort

 #include "algorithm"
int _tmain(int argc, _TCHAR* argv[])
{
    struct A
    {
        int age;
        LPCSTR name;
    };
    A as[] = {{18, "b"}, {19, "a"}, {20, "c"}, };

    std::sort(as, as +_countof(as), [](const A& l, const A& r){return l.name[0] < r.name[0];});
    cout << as[0].age << as[0].name <<endl;
    cout << as[1].age << as[1].name <<endl;
    cout << as[2].age << as[2].name <<endl;


    printf("The End\n");
    ::getchar();
    return 1;
}