#include <iostream>
#include <vector>
#include <algorithm>
#include <memory>
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);
friend bool operator<(const shared_ptr<Ship>& left, const shared_ptr<Ship>& right);
private:
string mName;
int mDistance;
};
bool operator<(const shared_ptr<Ship>& left, const shared_ptr<Ship>& right)
{
return left->mDistance < right->mDistance;
}
ostream & operator << (ostream &out, const Ship &ship)
{
return out << ship.mName << endl;
}
int main() {
vector<shared_ptr<Ship>> ships;
ships.push_back(make_shared<Ship>("some1", 20));
ships.push_back(make_shared<Ship>("some2", 10));
ships.push_back(make_shared<Ship>("some3", 5));
ships.push_back(make_shared<Ship>("some4", 40));
sort(ships.begin(), ships.end());
for (auto ship : ships)
{
cout << *ship;
// delete ship;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8bWVtb3J5Pgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKCmNsYXNzIFNoaXAKewpwdWJsaWM6CiAgICBTaGlwKCl7fQogICAgU2hpcChzdHJpbmcgbmFtZSwgaW50IGRpc3RhbmNlKQogICAgewogICAgICAgIG1OYW1lID0gbmFtZTsKICAgICAgICBtRGlzdGFuY2UgPSBkaXN0YW5jZTsKICAgIH0KICAgIH5TaGlwKCl7fQogICAgZnJpZW5kIG9zdHJlYW0gJiBvcGVyYXRvciA8PCAob3N0cmVhbSAmb3V0LCBjb25zdCBTaGlwICZzaGlwKTsKICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPChjb25zdCBzaGFyZWRfcHRyPFNoaXA+JiBsZWZ0LCBjb25zdCBzaGFyZWRfcHRyPFNoaXA+JiByaWdodCk7Cgpwcml2YXRlOgogICAgc3RyaW5nIG1OYW1lOwogICAgaW50IG1EaXN0YW5jZTsKfTsKCmJvb2wgb3BlcmF0b3I8KGNvbnN0IHNoYXJlZF9wdHI8U2hpcD4mIGxlZnQsIGNvbnN0IHNoYXJlZF9wdHI8U2hpcD4mIHJpZ2h0KQp7CglyZXR1cm4gbGVmdC0+bURpc3RhbmNlIDwgcmlnaHQtPm1EaXN0YW5jZTsKfQoKb3N0cmVhbSAmIG9wZXJhdG9yIDw8IChvc3RyZWFtICZvdXQsIGNvbnN0IFNoaXAgJnNoaXApIAp7CiAgIHJldHVybiBvdXQgPDwgc2hpcC5tTmFtZSA8PCBlbmRsOwp9CgoKaW50IG1haW4oKSB7Cgl2ZWN0b3I8c2hhcmVkX3B0cjxTaGlwPj4gc2hpcHM7CglzaGlwcy5wdXNoX2JhY2sobWFrZV9zaGFyZWQ8U2hpcD4oInNvbWUxIiwgMjApKTsKCXNoaXBzLnB1c2hfYmFjayhtYWtlX3NoYXJlZDxTaGlwPigic29tZTIiLCAxMCkpOwoJc2hpcHMucHVzaF9iYWNrKG1ha2Vfc2hhcmVkPFNoaXA+KCJzb21lMyIsIDUpKTsKCXNoaXBzLnB1c2hfYmFjayhtYWtlX3NoYXJlZDxTaGlwPigic29tZTQiLCA0MCkpOwoJCglzb3J0KHNoaXBzLmJlZ2luKCksIHNoaXBzLmVuZCgpKTsKCQoJZm9yIChhdXRvIHNoaXAgOiBzaGlwcykKCXsKCQljb3V0IDw8ICpzaGlwOwoJLy8JZGVsZXRlIHNoaXA7Cgl9CgkKCXJldHVybiAwOwp9