#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
class Ship
{
public:
Ship(){}
Ship(string name, int distance)
{
mName = name;
mDistance = distance;
}
~Ship(){}
friend ostream & operator << (ostream &out, const Ship &ship);
bool operator < (const Ship& str) const
{
return (mDistance < str.mDistance);
}
static bool ptrcmp(const Ship *a,const Ship *b)
{
return *a<*b;
}
private:
string mName;
int mDistance;
};
ostream & operator << (ostream &out, const Ship &ship)
{
return out << ship.mName << endl;
}
int main() {
vector<Ship*> ships;
ships.push_back(new Ship("some1", 20));
ships.push_back(new Ship("some2", 10));
ships.push_back(new Ship("some3", 5));
ships.push_back(new Ship("some4", 40));
sort(ships.begin(), ships.end(), Ship::ptrcmp);
for (Ship *ship : ships)
{
cout << *ship;
delete ship;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8YWxnb3JpdGhtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKCmNsYXNzIFNoaXAKewpwdWJsaWM6CiAgICBTaGlwKCl7fQogICAgU2hpcChzdHJpbmcgbmFtZSwgaW50IGRpc3RhbmNlKQogICAgewogICAgICAgIG1OYW1lID0gbmFtZTsKICAgICAgICBtRGlzdGFuY2UgPSBkaXN0YW5jZTsKICAgIH0KICAgIH5TaGlwKCl7fQogICAgZnJpZW5kIG9zdHJlYW0gJiBvcGVyYXRvciA8PCAob3N0cmVhbSAmb3V0LCBjb25zdCBTaGlwICZzaGlwKTsKICAgIGJvb2wgb3BlcmF0b3IgPCAoY29uc3QgU2hpcCYgc3RyKSBjb25zdAogICAgewogICAgICAgIHJldHVybiAobURpc3RhbmNlIDwgc3RyLm1EaXN0YW5jZSk7CiAgICB9CiAgICBzdGF0aWMgYm9vbCBwdHJjbXAoY29uc3QgU2hpcCAqYSxjb25zdCBTaGlwICpiKQogICAgewogICAgICAgIHJldHVybiAqYTwqYjsKICAgIH0KcHJpdmF0ZToKICAgIHN0cmluZyBtTmFtZTsKICAgIGludCBtRGlzdGFuY2U7Cn07Cgpvc3RyZWFtICYgb3BlcmF0b3IgPDwgKG9zdHJlYW0gJm91dCwgY29uc3QgU2hpcCAmc2hpcCkgCnsKICAgcmV0dXJuIG91dCA8PCBzaGlwLm1OYW1lIDw8IGVuZGw7Cn0KCgppbnQgbWFpbigpIHsKCXZlY3RvcjxTaGlwKj4gc2hpcHM7CglzaGlwcy5wdXNoX2JhY2sobmV3IFNoaXAoInNvbWUxIiwgMjApKTsKCXNoaXBzLnB1c2hfYmFjayhuZXcgU2hpcCgic29tZTIiLCAxMCkpOwoJc2hpcHMucHVzaF9iYWNrKG5ldyBTaGlwKCJzb21lMyIsIDUpKTsKCXNoaXBzLnB1c2hfYmFjayhuZXcgU2hpcCgic29tZTQiLCA0MCkpOwoJCglzb3J0KHNoaXBzLmJlZ2luKCksIHNoaXBzLmVuZCgpLCBTaGlwOjpwdHJjbXApOwoJCglmb3IgKFNoaXAgKnNoaXAgOiBzaGlwcykKCXsKCQljb3V0IDw8ICpzaGlwOwoJCWRlbGV0ZSBzaGlwOwoJfQoJCglyZXR1cm4gMDsKfQ==