#include <vector>
#include <algorithm>
#include <functional>
#include <iostream>
// Fakes a "smart pointer" wrapper around data
template <typename T>
struct Ptr
{
Ptr(T data) : data(data) {};
const T& operator*() const { return data; }
private:
T data;
};
int main()
{
std::vector<Ptr<double> > vIn;
vIn.push_back(Ptr<double>(5));
vIn.push_back(Ptr<double>(2));
vIn.push_back(Ptr<double>(6));
using namespace std::placeholders;
std::sort(
vIn.begin(),
vIn.end(),
std::bind(
std::less<double>(),
std::bind(&Ptr<double>::operator*, _1),
std::bind(&Ptr<double>::operator*, _2)
)
);
std::vector<Ptr<double>>::const_iterator it = vIn.begin(), end = vIn.end();
for ( ; it != end; ++it)
std::cout << ',' << **it;
}
I2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiNpbmNsdWRlIDxpb3N0cmVhbT4KCi8vIEZha2VzIGEgInNtYXJ0IHBvaW50ZXIiIHdyYXBwZXIgYXJvdW5kIGRhdGEKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CnN0cnVjdCBQdHIKewogICAgUHRyKFQgZGF0YSkgOiBkYXRhKGRhdGEpIHt9OwogICAgY29uc3QgVCYgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gZGF0YTsgfQogICAgCnByaXZhdGU6CiAgICBUIGRhdGE7Cn07CgppbnQgbWFpbigpCnsKICAgIHN0ZDo6dmVjdG9yPFB0cjxkb3VibGU+ID4gdkluOwogICAgdkluLnB1c2hfYmFjayhQdHI8ZG91YmxlPig1KSk7CiAgICB2SW4ucHVzaF9iYWNrKFB0cjxkb3VibGU+KDIpKTsKICAgIHZJbi5wdXNoX2JhY2soUHRyPGRvdWJsZT4oNikpOwogICAgCiAgICB1c2luZyBuYW1lc3BhY2Ugc3RkOjpwbGFjZWhvbGRlcnM7CiAgICBzdGQ6OnNvcnQoCiAgICAgICAgdkluLmJlZ2luKCksCiAgICAgICAgdkluLmVuZCgpLAogICAgICAgIHN0ZDo6YmluZCgKICAgICAgICAgICAgc3RkOjpsZXNzPGRvdWJsZT4oKSwKICAgICAgICAgICAgc3RkOjpiaW5kKCZQdHI8ZG91YmxlPjo6b3BlcmF0b3IqLCBfMSksCiAgICAgICAgICAgIHN0ZDo6YmluZCgmUHRyPGRvdWJsZT46Om9wZXJhdG9yKiwgXzIpCiAgICAgICAgKQogICAgKTsKICAgIAogICAgc3RkOjp2ZWN0b3I8UHRyPGRvdWJsZT4+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHZJbi5iZWdpbigpLCBlbmQgPSB2SW4uZW5kKCk7CiAgICBmb3IgKCA7IGl0ICE9IGVuZDsgKytpdCkKICAgICAgICBzdGQ6OmNvdXQgPDwgJywnIDw8ICoqaXQ7Cn0=