#include <iostream>
#include <string>
#include <stdio.h>
#include <vector>
#include <algorithm>
using namespace std;
using TStringList = vector< string >;
struct SPISOK_STRUCT
{
int sorting_field; //по этому полю будет сортировка
TStringList *spisok;
SPISOK_STRUCT(void) { sorting_field=0; spisok = new TStringList; }
~SPISOK_STRUCT(void) { delete spisok; spisok=NULL; }
SPISOK_STRUCT(const SPISOK_STRUCT& x)
{
spisok = new TStringList;
sorting_field = x.sorting_field;
for(int i=0; i < x.spisok->size(); i++)
spisok->push_back( x.spisok->at(i) );
}
SPISOK_STRUCT& operator= (const SPISOK_STRUCT& x)
{
if ( &x == this ) {
printf( "uuups\n" );
}
sorting_field = x.sorting_field;
spisok->clear();
for(int i=0; i < x.spisok->size(); i++)
spisok->push_back( x.spisok->at(i) );
return *this;
}
friend bool operator< (const SPISOK_STRUCT &x, const SPISOK_STRUCT &y)
{
bool ret = (x.sorting_field < y.sorting_field);
return ret;
}
};
/*---------------------------------------------*/
int main()
{
string astr;
vector<SPISOK_STRUCT> spiski; //вектор списков
spiski.clear();
for(int i=1; i<=4; i++) //делаем 4 списка по 2 строки в каждом
{
SPISOK_STRUCT x;
for(int j=1; j < 3; j++)
{
//AnsiString astr = AnsiString("spisok N'") + i + " line" + j;
string astr = string("spisok N'") + to_string( i ) + " line" + to_string( j );
x.spisok->push_back(astr);
}
x.sorting_field = i;
spiski.insert(spiski.end(), x);
}
//тестовый вывод строки из 4-го списка
astr = spiski[3].spisok->at(0);
printf("stable_sort1: %s\n", astr.c_str());
stable_sort(spiski.begin(), spiski.end());
//тестовый вывод строки из 4-го списка
astr = spiski[3].spisok->at(0);
printf("stable_sort2: %s\n", astr.c_str());
return 0;
}