smatskevich

Comparison for sorting

Oct 27th, 2015
210
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <algorithm>
  2. #include <iostream>
  3.  
  4. // Структура, массив объектов которых будем сортировать.
  5. struct CDate {
  6.     short Day;
  7.     short Month;
  8.     short Year;
  9.  
  10.     bool operator<( const CDate& other ) const;
  11. };
  12.  
  13. // Вариант 1. Оператор сравнения.
  14. bool CDate::operator<( const CDate& other ) const
  15. {
  16.     return Year < other.Year ||
  17.         ( Year == other.Year && ( Month < other.Month ||
  18.             ( Month == other.Month && Day < other.Day ) ) );
  19. }
  20.  
  21. namespace std {
  22.     // Явная специализация.
  23.     template<>
  24.     void swap<CDate>( CDate& left, CDate& right )
  25.     {
  26.         CDate temp = left;
  27.         left = right;
  28.         right = temp;
  29.     }
  30. }
  31.  
  32. // Вариант 2. Функция сравнения.
  33. typedef bool( *TCompareFunction )( const CDate&, const CDate& );
  34.  
  35. bool MyCompareFunction( const CDate& left, const CDate& right )
  36. {
  37.     return left < right;
  38. }
  39.  
  40. // Вариант 3. Функтор - класс с определенным оператором "круглые скобки от двух аргументов".
  41. class CMyFunctor {
  42. public:
  43.     explicit CMyFunctor( bool _doCompare ) : doCompare( _doCompare ) {}
  44.     bool operator()( const CDate& left, const CDate& right ) { return doCompare && left < right; }
  45.  
  46. private:
  47.     bool doCompare;
  48. };
  49.  
  50. // Собственно сортировка.
  51. template<class T, class Functor>
  52. void BubbleSort( T* vector, int n, Functor functor )
  53. {
  54.     for( int i = 0; i < n - 1; ++i ) {
  55.         for( int j = 0; j < n - 1; ++j ) {
  56.             if( functor( vector[j + 1], vector[j] ) ) {
  57.                 std::swap( vector[j], vector[j + 1] );
  58.             }
  59.         }
  60.     }
  61. }
  62.  
  63. int main()
  64. {
  65.     int n = 0;
  66.     std::cin >> n;
  67.  
  68.     CDate* dates = new CDate[n];
  69.     for( int i = 0; i < n; ++i ) {
  70.         std::cin >> dates[i].Day;
  71.         std::cin >> dates[i].Month;
  72.         std::cin >> dates[i].Year;
  73.     }
  74.     CMyFunctor myFunctor( false );
  75.     BubbleSort( dates, n, myFunctor );
  76.     for( int i = 0; i < n; ++i ) {
  77.         std::cout << dates[i].Day << "." << dates[i].Month << "." << dates[i].Year << std::endl;
  78.     }
  79. }
RAW Paste Data

Adblocker detected! Please consider disabling it...

We've detected AdBlock Plus or some other adblocking software preventing Pastebin.com from fully loading.

We don't have any obnoxious sound, or popup ads, we actively block these annoying types of ads!

Please add Pastebin.com to your ad blocker whitelist or disable your adblocking software.

×