0

私はc++を勉強していて、その仕事を与えられました。構造を作成する必要がありますStudent

#include "stdafx.h"
using namespace std;

const int num = 5;

struct Student  {
    string name;
    int groupNumber;
    int progress[num];
};

そしてそれを操作します。
それは私のプログラムです

#include "stdafx.h"
#include "Student.h"
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
srand((unsigned)time(NULL));

int n;
cout << "Input n = ";
cin >> n;
cin.ignore();

Student * Group = new Student[n];

for (int i = 0; i < n; ++i)
{
    cout << "Input name: ";
    getline (cin, Group[i].name);
    Group[i].groupNumber = rand()%5 + 1;
    for (int j = 0; j < num; ++j)
    {
        Group[i].progress[j] = rand()%5 + 2;
    }
}

int * groupNumberArray = new int[n];
for (int i = 0; i < n; ++i)
{
    groupNumberArray[i] = Group[i].groupNumber;
}

for (int i; i < n - 1; ++i)
{
    int min = i;
    for (int j = i + 1; j < n; ++j)
    {
        if (groupNumberArray[min] <= groupNumberArray[j]) continue;
        min = j;
    }
    if (min != i)
    {
        int temp = groupNumberArray[i];
        groupNumberArray[i] = groupNumberArray[min];
        groupNumberArray[min] = temp;

        Student * tempStudent = &Group[i];
        &Group[min] = &Group[i];
        &Group[i] = tempStudent;
    }
}

cout << "\n\n";

delete [] Group;
delete [] groupNumberArray;

system("PAUSE");
return 0;
}  

groupNumber の増加に応じて生徒を並べ替える必要があります。
ポインターを使用しようとしましたが、うまくいきません。並べ替えを正しく機能させるにはどうすればよいですか?

4

2 に答える 2

3

可能性std::sortとして、配列でコンパレータ メソッドを使用することができます。

例:

bool Compare_By_Group(const Student& a, const Student& b)
{
  return a.groupNumber /* insert comparison operator here */ b.groupNumber;
}

// The sort function call
    std::sort(&Group[0],
              &Group[/* last index + 1*/],
              Compare_By_Group);
于 2013-10-11T13:19:42.023 に答える