Przykład sortowania tablicy struktur względem wybranego elementu z użyciem funkcji sort.

Program losuje 30 rekordów (każdy po trzy liczby - kolumny/a/b/c.

Głównym kryterium sortującym jest wartość w kolumnie a, kolejnym b (tylko w przypadku jednakowych wartości w kolumnie a), w przypadku jednakowych wartości w kolumnach a i b, sortowanie odbywa się na postawie wartości z kolumny c.

  1. #include<iostream>
  2. #include<algorithm>
  3. #include<ctime>
  4. using namespace std;
  5.  
  6. struct dane
  7. {
  8.         int a;
  9.         int b;
  10.         int c;
  11. };
  12.  
  13. bool cmp(dane,dane);
  14.  
  15.  
  16. int main()
  17. {
  18.         srand(time(NULL));
  19.         dane T[30];
  20.        
  21.         for(int i=0;i<30;i++)          
  22.                 {
  23.                         T[i].a=rand()%20+1;
  24.                         T[i].b=rand()%20+1;
  25.                         T[i].c=rand()%20+1;
  26.                 }
  27.  
  28.         //dane przed sortowaniem
  29.         cout<<"\ndane przed sortowaniem";
  30.         for(int i=0;i<30;i++)          
  31.                 cout<<"\nrekord "<<i<<"\t"<<T[i].a<<"\t"<<T[i].b<<"\t"<<T[i].c<<" ";
  32.  
  33.         //dane posortowane wzgledem .a
  34.         cout<<"\n\ndane po sortowaniu kol:a";
  35.         sort (T,T+30,cmp)       ;
  36.         for(int i=0;i<30;i++)          
  37.                 cout<<"\nrekord "<<i<<"\t"<<T[i].a<<"\t"<<T[i].b<<"\t"<<T[i].c<<" ";
  38.                
  39.  
  40. }
  41.  
  42.  
  43. bool cmp(dane A,dane B)
  44. {
  45.         if (A.a==B.a)
  46.                 if (A.b==B.b)
  47.                         return A.c<B.c;
  48.                 else   
  49.                         return A.b<B.b;
  50.         else   
  51.         return A.a<B.a;
  52. }
  53.  
  54.  

 

Zobacz działenie powyższego kodu w kompilatorze online >>>.