On 13 December 2011 10:07, Igor R
<boost.lists@gmail.com> wrote:
> -- I'm trying to use shared_ptr in a stl set, but am having trouble with find()
> Any help? Documentation on this seems hard to find.
>
> -- Also, are the overloaded < and == useful or correct here?
No, std algorithms won't call your comparison operators, because those
of boost::shared_ptr do not compare pointees.
You can define in your cpp something like this (operator ==() is not
needed for your particular case):
operator<() is needed for set sorting, but he does need operator==() for the find() to work.
namespace boost
{
template<class T>
bool operator <(const shared_ptr<T> &lhs, const shared_ptr<T> &rhs)
{
if (!lhs && !rhs)
return false;
return *lhs < *rhs;
}
}
Then move your operator <() out of Node class, and your programm will work.
Your program might work, but anyone else who might include your operator<() definition in their own code will be extremely surprised when this doesn't work as expected:
ASSERT_FALSE(shared_ptr<Foo>(new Foo()) == shared_ptr<Foo>(new Foo()));