#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
class Foo
{
private:
std::string name;
int age;
public:
Foo(const char *_name, int _age)
: name(_name)
, age(_age)
{}
const char *getName(void) const { return name.c_str(); }
int getAge(void) const { return age; }
};
bool compareAge(Foo *foo1, Foo *foo2)
{
return foo1->getAge() < foo2->getAge();
}
namespace my
{
typedef std::vector<Foo *> vector;
}
using my::vector;
using std::sort;
using std::cout;
using std::endl;
int main(void)
{
Foo foo1("A", 10);
Foo foo2("B", 30);
Foo foo3("C", 5);
vector foo_v;
foo_v.insert(foo_v.end(), &foo1);
foo_v.insert(foo_v.end(), &foo2);
foo_v.insert(foo_v.end(), &foo3);
sort(foo_v.begin(), foo_v.end(), compareAge);
// Print out the contents of foo_v.
for(vector::iterator it(foo_v.begin()); it != foo_v.end(); ++it)
{
Foo *&pFoo = *it;
cout << pFoo->getName() << endl;
}
}
I2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGlvc3RyZWFtPgoKY2xhc3MgRm9vCnsKcHJpdmF0ZToKICAgIHN0ZDo6c3RyaW5nIG5hbWU7CiAgICBpbnQgYWdlOwoKcHVibGljOgogICAgRm9vKGNvbnN0IGNoYXIgKl9uYW1lLCBpbnQgX2FnZSkKICAgICAgICA6IG5hbWUoX25hbWUpCiAgICAgICAgLCBhZ2UoX2FnZSkKICAgIHt9CgogICAgY29uc3QgY2hhciAqZ2V0TmFtZSh2b2lkKSBjb25zdCB7IHJldHVybiBuYW1lLmNfc3RyKCk7IH0KICAgIGludCBnZXRBZ2Uodm9pZCkgY29uc3QgeyByZXR1cm4gYWdlOyB9CiAgICAKfTsKCmJvb2wgY29tcGFyZUFnZShGb28gKmZvbzEsIEZvbyAqZm9vMikKewogICAgcmV0dXJuIGZvbzEtPmdldEFnZSgpIDwgZm9vMi0+Z2V0QWdlKCk7Cn0KCm5hbWVzcGFjZSBteQp7CiAgICB0eXBlZGVmIHN0ZDo6dmVjdG9yPEZvbyAqPiB2ZWN0b3I7Cn0KCnVzaW5nIG15Ojp2ZWN0b3I7CnVzaW5nIHN0ZDo6c29ydDsKdXNpbmcgc3RkOjpjb3V0Owp1c2luZyBzdGQ6OmVuZGw7CgppbnQgbWFpbih2b2lkKQp7CiAgICBGb28gZm9vMSgiQSIsIDEwKTsKICAgIEZvbyBmb28yKCJCIiwgMzApOwogICAgRm9vIGZvbzMoIkMiLCA1KTsKICAgIHZlY3RvciBmb29fdjsKCiAgICBmb29fdi5pbnNlcnQoZm9vX3YuZW5kKCksICZmb28xKTsKICAgIGZvb192Lmluc2VydChmb29fdi5lbmQoKSwgJmZvbzIpOwogICAgZm9vX3YuaW5zZXJ0KGZvb192LmVuZCgpLCAmZm9vMyk7CgogICAgc29ydChmb29fdi5iZWdpbigpLCBmb29fdi5lbmQoKSwgY29tcGFyZUFnZSk7CgogICAgLy8gUHJpbnQgb3V0IHRoZSBjb250ZW50cyBvZiBmb29fdi4KICAgIGZvcih2ZWN0b3I6Oml0ZXJhdG9yIGl0KGZvb192LmJlZ2luKCkpOyBpdCAhPSBmb29fdi5lbmQoKTsgKytpdCkKICAgIHsKICAgICAgICBGb28gKiZwRm9vID0gKml0OwogICAgICAgIGNvdXQgPDwgcEZvby0+Z2V0TmFtZSgpIDw8IGVuZGw7CiAgICB9Cn0K