Picked up this question from here and made a program out of it. It may be a good idea to quickly brush functors and templates if required.
The program sorts the input Vector provided regardless of the type.
//Program tested on Microsoft Visual Studio 2008 - Zahid Ghadialy
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
class Int
{
public:
Int() {x_ = 0;}
Int(const int &x) {x_ = x;}
int getID (void) {return x_;}
int x_;
};
class Str
{
public:
Str() {x_ = "";}
Str(const string &x) {x_ = x;}
string getID (void) {return x_;}
string x_;
};
template <typename Object> class Comparator {
public:
bool operator()(const Object &o1, const Object &o2) const
{
return (const_cast<Object&>(o1).getID() < const_cast<Object&>(o2).getID());
}
bool operator()(const Object *o1, const Object *o2) const {
return (o1->getID() < o2->getID());
}
};
template <typename VecObject> void Display(VecObject v)
{
VecObject::iterator it;
for(it = v.begin(); it != v.end(); ++it)
{
cout<<it->getID()<<", ";
}
cout<<endl;
}
int main()
{
vector<Int> objects1;
objects1.push_back(Int(3));
objects1.push_back(Int());
objects1.push_back(Int(77));
//print the output
cout<<"objects1 before sort = ";
Display(objects1);
std::sort(objects1.begin(), objects1.end(), Comparator<Int> ());
cout<<"objects1 after sort = ";
Display(objects1);
std::vector<Str> objects2;
objects2.push_back(Str("Hello Hello"));
objects2.push_back(Str("apple?"));
objects2.push_back(Str());
objects2.push_back(Str("1 Jump"));
//print the output
cout<<"objects2 before sort = ";
Display(objects2);
std::sort(objects2.begin(), objects2.end(), Comparator<Str> ());
cout<<"objects2 after sort = ";
Display(objects2);
return 0;
}
The output is as follows: