Sortowanie tablicy struktur względem wybranego elementu z użyciem funkcji sort.

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

W pierwszym przebiegu program sortuje rekordy według kolumny a.

W drugim przebiegu program sortuje rekordy według kolumny b - niezależnie od wartości w kolumnie a.

W trzecim przebiegu program sortuje rekordy według kolumny c - niezależnie od wartości w kolumnach a i b.

 

  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 cmpA(dane,dane);
  14. bool cmpB(dane,dane);
  15. bool cmpC(dane,dane);
  16.  
  17. int main()
  18. {
  19.         srand(time(NULL));
  20.         dane T[10];
  21.        
  22.         for(int i=0;i<10;i++)          
  23.                 {
  24.                         T[i].a=rand()%100+1;
  25.                         T[i].b=rand()%100+1;
  26.                         T[i].c=rand()%100+1;
  27.                 }
  28.  
  29.         //dane przed sortowaniem
  30.         cout<<"\ndane przed sortowaniem";
  31.         for(int i=0;i<10;i++)          
  32.                 cout<<"\nrekord "<<i<<"\t"<<T[i].a<<"\t"<<T[i].b<<"\t"<<T[i].c<<" ";
  33.  
  34.         //dane posortowane wzgledem .a
  35.         cout<<"\n\ndane po sortowaniu kol:a";
  36.         sort (T,T+10,cmpA)      ;
  37.         for(int i=0;i<10;i++)          
  38.                 cout<<"\nrekord "<<i<<"\t"<<T[i].a<<"\t"<<T[i].b<<"\t"<<T[i].c<<" ";
  39.                
  40.         //dane posortowane wzgledem .b
  41.         cout<<"\n\ndane po sortowaniu kol:b";
  42.         sort (T,T+10,cmpB)      ;
  43.         for(int i=0;i<10;i++)          
  44.                 cout<<"\nrekord "<<i<<"\t"<<T[i].a<<"\t"<<T[i].b<<"\t"<<T[i].c<<" ";           
  45.        
  46.         //dane posortowane wzgledem .c
  47.         cout<<"\n\ndane po sortowaniu kol:c";
  48.         sort (T,T+10,cmpC)      ;
  49.         for(int i=0;i<10;i++)          
  50.                 cout<<"\nrekord "<<i<<"\t"<<T[i].a<<"\t"<<T[i].b<<"\t"<<T[i].c<<" ";   
  51. }
  52.  
  53.  
  54. bool cmpA(dane A,dane B)
  55. {
  56.        
  57.         return A.a<B.a;
  58. }
  59.  
  60.  
  61. bool cmpB(dane A,dane B)
  62. {
  63.        
  64.         return A.b<B.b;
  65. }
  66.  
  67.  
  68. bool cmpC(dane A,dane B)
  69. {
  70.        
  71.         return A.c<B.c;
  72. }
  73.  

 

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