fork download
  1. #include <iostream>
  2. #include <string>
  3. #include <stdio.h>
  4. #include <vector>
  5. #include <algorithm>
  6. using namespace std;
  7.  
  8. using TStringList = vector< string >;
  9.  
  10. struct SPISOK_STRUCT
  11. {
  12. int sorting_field; //по этому полю будет сортировка
  13. TStringList *spisok;
  14.  
  15. SPISOK_STRUCT(void) { sorting_field=0; spisok = new TStringList; }
  16. ~SPISOK_STRUCT(void) { delete spisok; spisok=NULL; }
  17. SPISOK_STRUCT(const SPISOK_STRUCT& x)
  18. {
  19. spisok = new TStringList;
  20. sorting_field = x.sorting_field;
  21. for(int i=0; i < x.spisok->size(); i++)
  22. spisok->push_back( x.spisok->at(i) );
  23. }
  24.  
  25. SPISOK_STRUCT& operator= (const SPISOK_STRUCT& x)
  26. {
  27. if ( &x == this ) {
  28. printf( "uuups\n" );
  29. }
  30. sorting_field = x.sorting_field;
  31. spisok->clear();
  32. for(int i=0; i < x.spisok->size(); i++)
  33. spisok->push_back( x.spisok->at(i) );
  34. return *this;
  35. }
  36.  
  37. friend bool operator< (const SPISOK_STRUCT &x, const SPISOK_STRUCT &y)
  38. {
  39. bool ret = (x.sorting_field < y.sorting_field);
  40. return ret;
  41. }
  42. };
  43.  
  44. /*---------------------------------------------*/
  45. int main()
  46. {
  47. string astr;
  48. vector<SPISOK_STRUCT> spiski; //вектор списков
  49.  
  50. spiski.clear();
  51. for(int i=1; i<=4; i++) //делаем 4 списка по 2 строки в каждом
  52. {
  53. SPISOK_STRUCT x;
  54. for(int j=1; j < 3; j++)
  55. {
  56. //AnsiString astr = AnsiString("spisok N'") + i + " line" + j;
  57. string astr = string("spisok N'") + to_string( i ) + " line" + to_string( j );
  58. x.spisok->push_back(astr);
  59. }
  60.  
  61. x.sorting_field = i;
  62. spiski.insert(spiski.end(), x);
  63. }
  64.  
  65. //тестовый вывод строки из 4-го списка
  66. astr = spiski[3].spisok->at(0);
  67. printf("stable_sort1: %s\n", astr.c_str());
  68.  
  69. stable_sort(spiski.begin(), spiski.end());
  70. //тестовый вывод строки из 4-го списка
  71. astr = spiski[3].spisok->at(0);
  72. printf("stable_sort2: %s\n", astr.c_str());
  73.  
  74. return 0;
  75. }
Success #stdin #stdout 0s 3260KB
stdin
Standard input is empty
stdout
stable_sort1: spisok N'4 line1
stable_sort2: spisok N'4 line1