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