2013-10-11 2 views
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

Пожалуйста, укажите ваши требования, в противном случае мы будем просто говорить "использовать' зОго :: sort' с подходящим предикатом, концом". – juanchopanza

+1

Путь на C++ будет: Предоставить компаратор для структуры Student и просто использовать алгоритм сортировки. – dornhege

+2

Объявить 'group' как' std :: vector group; 'then use' std :: sort' .... –

ответ

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); 
+0

'& Group [/ * последний индекс + 1 * /] 'является незаконным C++ (UB). Вместо этого используйте 'Group + N' (нет причин использовать' & Group [0] 'вместо распада указателя' Group', за исключением причин разрешения перегрузки). –

1
vector<Student> students(n); 
    .. populate students 
    sort(students.begin(), students.end(), [](const Student& left, const Student& right){ return left.groupNumber < right.groupNumber; }); 
Смежные вопросы