Programowanie i algorytmy

Sortowanie struktur

Zad. 2. Napisz program, który posortuje tablicę struktur przechowujących nazwisko studenta oraz jego średnią według średnich (od najwyższej do najniższej). Do sortowania wykorzystaj funkcję sort z biblioteki algorithm.

Rozwiązanie.


Do rozwiązania problemu posłużymy się funkcją operatorową i przeciążymy operator "<" aby dane zostały posortowane malejąco. Funkcja sort przy porównywaniu dwóch elementów tablicy {tex}studenci{/tex} zamieni je miejscami w sytuacji, gdy pierwszy element będzie mniejszy od drugiego.

#include<iostream>
#include<cstdlib>
#include<iomanip>
#include<algorithm>
 
using namespace std;
 
struct student{  //stworzenie własnego typu o nazwie student
  char nazwisko[25];
  double srednia;
  bool operator < (const student &x)const //zdefiniowanie zachowania się
  {                //operatora < potrzebnego przy sortowaniu
    return srednia>x.srednia;
  }
 
};
 
int main()
{
  //stworzenie studentów i przypisanie do nich przykładowych danych
  student studenci[] = { //tablica będzie się składać z 10 studentów
    {"Kowalski",  3.12},
    {"Kasprowicz",  4.40},
    {"Nowak",    6.00},
    {"Kosak",    5.44},
    {"Nasiadka",  5.32},
    {"Nowicki",    3.44},
    {"Kanigowski",  4.00},
    {"Danusiak",  4.00},
    {"Dworznik",  4.20},
    {"Kaminski",  3.00}
  };
  cout<<"Dane studentów przed sortowaniem: "<<endl;
  for(int i=0;i<10;i++)
    cout<<"Nazwisko: "<<studenci[i].nazwisko
    <<", srednia: "<<fixed<<setprecision(2)
    <<studenci[i].srednia<<endl;
 
  sort(studenci,studenci+10); //sortowanie studentów
 
  cout<<endl;
  cout<<"Dane studentów po sortowaniu: "<<endl;
  for(int i=0;i<10;i++)
    cout<<"Nazwisko: "<<studenci[i].nazwisko
    <<", srednia: "<<fixed<<setprecision(2)
    <<studenci[i].srednia<<endl;
  system("pause");
  return 0;
}
 

Out:

struktura