Форум программистов, компьютерный форум CyberForum.ru

Сортировка элементов массива структур шаблонной функцией - C++

Восстановить пароль Регистрация
 
montkay
10 / 10 / 8
Регистрация: 19.02.2014
Сообщений: 72
12.03.2014, 23:38     Сортировка элементов массива структур шаблонной функцией #1
Как отсортировать с помощью шаблонной функции по значению полей в массиве структур? Кто знает, подскажите пожалуйста. Программа, которую написал, выглядит так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
#include "stdafx.h"
#include <iostream>
#include <string.h>
#include <time.h>
#include <memory.h>
#include <memory>
#include <stdlib.h>
#include <iomanip>
using namespace std;
const int ArSize = 10;
const int n = 5;
struct student              // структура, в которой находятся имя, фамилия, оценки и средняя оценка студента
{
    char name[ArSize];      // имя
    char surname[ArSize];   // фамилия
    int notes[n];           // массив, в котором находятся пять оценок
    double average;         // средняя оценка
};
void inite(student * pStud, int k); // создание массива структур, где указаны студенты с их оценками
void show(student * pStud, int k);  // отображение этого массива
template <typename t>
void sort_t(t *pArr, int k);        // вот эту функцию хотелось бы сделать пригодной для сортировки не только по среднему значению,
                                    // но и по другим оценкам.
int main()
{   
    cout << "Enter the number of students: ";
    int k;
    while (cin >> k)
    {
        if (k < 1)
            cout << "There is no sence to create the list without\n"
                    "even one student. Enter another number: ";
        else
            break;
    }
    student * pStud = new student [k];
    inite(pStud, k);
    show(pStud, k);
    sort_t(pStud, k);
    show(pStud, k);
    delete [] pStud;
}
void inite(student * pStud, int k)
{
    srand(unsigned (time(0)));
    char name_stud[5][25] = {"Ludvig", "Sasha", "Amadei", "Karl", "Salvador"};
    char surname_stud[5][25] = {"Bethoven", "Ten", "Mozart", "Marks", "Dali"};
    for (int i = 0; i < k; ++i)
    {
        strcpy_s(pStud[i].name, name_stud[rand()%5]);
        strcpy_s(pStud[i].surname, surname_stud[rand()%5]);
        for (int j = 0; j < n; ++j)
            pStud[i].notes[j] = rand()%3 + 3;
        int sum = 0;
        for (int j = 0; j < n; ++j)
            sum += pStud[i].notes[j];
        pStud[i].average = (double) sum/n;
    }
}
void show(student * pStud, int k)
{
    cout << endl;
    cout << char (218);
    for (int i = 0; i < 3; ++i)
        cout << "-";
    cout << char (194);
    for (int i = 0; i < 10; ++i)
        cout << "-";
    cout << char (194);
    for (int i = 0; i < 9; ++i)
        cout << "-";
    cout << char (194);
    for (int i = 0; i < 5; ++i)
        cout << "--" << char (194);
    for (int i = 0; i < 12; ++i)
        cout << "-";
    cout << char (191) << endl;
    cout << "|" << setw(4) << "Num|";
    cout << setw(ArSize) << "First name" << "|";
    cout << setw(ArSize-1) << "Last name" << "|";
    for (int i = 0; i < n; ++i)
        cout << "#" << i + 1 << "|";
    cout << "Average mark" << "|" << endl;
    for (int j = 0; j < k; ++j)
    {
        cout << char (195);
        for (int i = 0; i < 3; ++i)
            cout << "-";
        cout << char (197);
        for (int i = 0; i < ArSize; ++i)
            cout << "-";
        cout << char (197);
        for (int i = 0; i < ArSize - 1; ++i)
            cout << "-";
        cout << char (197);
        for (int i = 0; i < 5; ++i)
            cout << "--" << char (197);
        for (int i = 0; i < 12; ++i)
            cout << "-";
        cout << char (180) << endl;
        cout << "|" << setw(3) << j + 1 << "|";
        cout << setw(ArSize) << pStud[j].name << "|";
        cout << setw(ArSize-1) << pStud[j].surname << "|";
        for (int i = 0; i < n; ++i)
            cout << " " << pStud[j].notes[i] << "|";
        cout << setw(8) << pStud[j].average << setw(5) << "|";
        cout << endl;
    }
    cout << char (192);
    for (int i = 0; i < 3; ++i)
        cout << "-";
    cout << char (193);
    for (int i = 0; i < 10; ++i)
        cout << "-";
    cout << char (193);
    for (int i = 0; i < 9; ++i)
        cout << "-";
    cout << char (193);
    for (int i = 0; i < 5; ++i)
        cout << "--" << char (193);
    for (int i = 0; i < 12; ++i)
        cout << "-";
    cout << char (217) << endl << endl;
}
template <typename t>
void sort_t(t *pArr, int k)
{
    t *pTemp = new t;
    for (int i = 0; i < k - 1; ++i)
    {
        int f = i + 1;
        for (int j = i + 2; j < k; ++j)
            if (pArr[f] > pArr[j])
                f = j;
        if (pArr[f] < pArr[i])
        {
            *pTemp = pArr[f];
            pArr[f] = pArr[i];
            pArr[i] = *pTemp;
        }
    }
    delete pTemp;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.03.2014, 23:38     Сортировка элементов массива структур шаблонной функцией
Посмотрите здесь:

C++ Сортировка массива функцией
Сортировка массива структур по первым трём цифрам одного из его элементов C++
Сортировка массива структур C++
Сортировка массива структур C++
C++ сортировка структур массива
Сортировка массива структур через сортировку массива указателей C++
Возврат функцией массива структур C++
Создание dll-файла с шаблонной функцией C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
13.03.2014, 03:04     Сортировка элементов массива структур шаблонной функцией #2
Цитата Сообщение от montkay Посмотреть сообщение
// вот эту функцию хотелось бы сделать пригодной для сортировки не только по среднему значению, но и по другим оценкам.
Тут можно и без шаблона обойтись. Передавайте в функцию название поля (или флаг), в зависимости от него сортируйте нужное поле.
montkay
10 / 10 / 8
Регистрация: 19.02.2014
Сообщений: 72
13.03.2014, 09:35  [ТС]     Сортировка элементов массива структур шаблонной функцией #3
alsav22, можно обойтись без шаблонной функции. Но у меня задание реализовать сортировку именно через шаблонную функцию.
Yandex
Объявления
13.03.2014, 09:35     Сортировка элементов массива структур шаблонной функцией
Ответ Создать тему
Опции темы

Текущее время: 11:31. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru