Сортировать елементы структуры за алфавитом

Всем привет,есть структура FOOTBALL ,нужно сортировать елементы структуры за алфавитом названий команд и соотвественно чтобы другие елементы тоже менялись местами.

#include <iostream>
#include <iomanip>
#include <string.h>
#include <cstring>

using namespace std;

struct FOOTBALL{
    char NAME[20];
    char COUNTRY[20];
    int BALL[20];
};

void input(int n,FOOTBALL *TURNIR){
    for(int i = 0;i < n ;i++){
        cin.ignore();
        cout << endl << "Team:";
        gets(TURNIR[i].NAME);
        cout << endl << "Country:";
        gets(TURNIR[i].COUNTRY);
        cout << endl << "Ball:";
        cin >> TURNIR[i].BALL[1];
    }
}

void output(int n,FOOTBALL *TURNIR){
    for(int i = 0; i < n;i++){
        int counter = 1;
        cout << counter << "." << " " <<  TURNIR[i].NAME << "\t";
        cout << TURNIR[i].COUNTRY << "\t";
        cout << TURNIR[i].BALL[1] << endl;
        counter++;
    }
}

void sort(int n, FOOTBALL *TURNIR){

}

int main(){
    setlocale(LC_ALL, "Ukrainian");
    int n;
    cout << "Enter n:";
    cin >> n;
    FOOTBALL *TURNIR = new FOOTBALL[n];
    input(n,TURNIR);
    output(n,TURNIR);
    delete[] TURNIR;
}

Можете подсказать как написать функцию sort?


Ответы (1 шт):

Автор решения: Harry

У вас С++, так что воспользуемся стандартной функцией sort из стандартной библиотеки. Надо только описать компаратор

bool COMPARE(const FOOTBALL& a, const FOOTBALL& b)
{
    if (strcmp(a.NAME,b.NAME) < 0) return true;
    if (strcmp(a.COUNTRY,b.COUNTRY) < 0) return true;
    return a.BALL[1] < b.BALL[1]; // Тут уж сами решите, как сравнивать,
    // я для простоты сравниваю только второе значение - которое
    // вы вводите в программе
}

и после этого ваша функция примет вид

void sort(int n, FOOTBALL * TURNIR)
{
    sort(TURNIR, TURNIR + n, COMPARE);
}

Всё. Остальной код программы не смотрел, так что какие там ошибки — не знаю.

В самом вопросе... По-русски пишут элемент, по алфавиту. Запятые тут расставляются примерно так же, как и в украинском.

→ Ссылка