Boost.Lambdaを使用してvector<shared_ptr<T>>をソート

*boost::lambda::_1で間接参照できたんですね。

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <boost/lambda/lambda.hpp>
#include <boost/shared_ptr.hpp>
#include <boost/make_shared.hpp>

struct person {
    int age;
    std::string name;

    person(int age, const std::string& name)
        : age(age), name(name) {}
};

bool operator<(const person& lhs, const person& rhs)
{
    return lhs.age < rhs.age;
}

std::ostream& operator<<(std::ostream& os, const person& p)
{
    return os << p.age << "," << p.name;
}

int main()
{
    using namespace boost;
    using namespace boost::lambda;

    std::vector<shared_ptr<person> > v;

    v.push_back(make_shared<person>(24, "Akira"));
    v.push_back(make_shared<person>(17, "Noel"));
    v.push_back(make_shared<person>(38, "Bang"));

    std::sort(v.begin(), v.end(), *_1 < *_2);

    std::for_each(v.begin(), v.end(), std::cout << *_1 << "\n");
}
17,Noel
24,Akira
38,Bang