How to sort an object container std :: shared_ptr <Widget>?
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 a container according to a criterion without defining another type criterion:
class CriteriumForPointers
{
public:
bool operator()(const std::shared_ptr<Widget>& left,
const std::shared_ptr<Widget>& right)const;
};
+5
3 answers
Use indirect iterators as follows:
std::sort(
boost::make_indirect_iterator(container.begin()),
boost::make_indirect_iterator(container.end()),
Criterium()
);
See also: http://www.boost.org/doc/libs/1_49_0/libs/iterator/doc/indirect_iterator.html
+4
Perhaps you could put the second operator overload () in your Criterium class, for example:
class Criterium {
bool operator()(const Widget& left, const Widget& right)const;
bool operator()(const std::shared_ptr<Widget>& left,
const std::shared_ptr<Widget>& right)const
{ return operator()( *left, *right ); }
};
(note: I have not tested this)
+1