如何对std :: shared_ptr <Widget>对象的容器进行排序?

Mar*_*dik 5 c++ stl-algorithm c++11

class Widget;

std::vector< std::shared_ptr<Widget> > container

class Criterium
{
public:
    bool operator()(const Widget& left, const Widget& right)const;
};
Run Code Online (Sandbox Code Playgroud)

如何根据Criterium对容器进行排序,而不是定义另一个标准,如:

class CriteriumForPointers
{
public:
    bool operator()(const std::shared_ptr<Widget>& left, 
                    const std::shared_ptr<Widget>& right)const;
};
Run Code Online (Sandbox Code Playgroud)

Jon*_*Jon 8

您可以使用lambda作为适配器:

Criterium criterium;
sort(container.begin(), container.end(),
     [&criterium] (const shared_ptr<Widget> &l, const shared_ptr<Widget> &r)
     {
         return criterium(*l.get(), *r.get());
     }
);
Run Code Online (Sandbox Code Playgroud)