Search code examples
c++c++11stl-algorithm

How to sort a container of std::shared_ptr<Widget> objects?


class Widget;

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

class Criterium
{
public:
    bool operator()(const Widget& left, const Widget& right)const;
};

How can I sort the container according to the Criterium, without defining another criterium like:

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

Solution

  • You could use a lambda as an adapter:

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