// L-30 MCS 360 Mon 1 Nov 2010 : use_stl_sort

/* We illustrate how to sort an STL vector
   and set up an environment to test sorting algorithms.
   With stable sort, items with the same value retain
   their relative order.  */

#include <iostream>
#include <cstdlib>
#include <ctime>
#include <vector>
// #include <algorithm> // seems optional
using namespace std;

vector< pair<int,char> > random_vector ( int n );
// returns a vector of n random 2-digit numbers
// associated with lower case letters

void write_vector ( vector< pair<int,char> > v );
// writes the vector v

struct less_than // defines "<"
{
   bool operator()(const pair<int,char>& a,
                   const pair<int,char>& b)
   {
      return (a.first < b.first);
   }
};

int main()
{
   cout << "give n : ";
   int n; cin >> n;

   srand(time(0));
   vector< pair<int,char> > v = random_vector(n);
   // cout << n << " random items : ";
   // write_vector(v); cout << endl;

   std::clock_t tstart,tstop;
   tstart = std::clock();

   sort(v.begin(),v.end(),less_than());

   tstop = std::clock();
   cout << "time elapsed : " 
        << (tstop - tstart)/double(CLOCKS_PER_SEC) 
        << " seconds" << endl;

   // cout << "the sorted vector : ";
   // write_vector(v); cout << endl;

   return 0;
}

vector< pair<int,char> > random_vector ( int n )
{
   vector< pair<int,char> > v;

   for(int i=0; i<n; i++)
   {
      pair<int,char> p;
      p.first = 10 + (rand() % 90);
      p.second = 'a' + rand() % 26;
      v.push_back(p);
   }

   return v;
}

void write_vector ( vector< pair<int,char> > v )
{
   for(int i=0; i<v.size(); i++)
      cout << "(" << v[i].first
           << "," << v[i].second
           << ")";
}

