n 13 December 2011 13:38, Lars Viklund <zao@acc.umu.se> wrote:
On Tue, Dec 13, 2011 at 12:52:33PM +0000, Rob Desbois wrote:
> 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.

Sets do not "need" op<. The default comparator template argument is
std::less<K>, which has a fallback implementation using op< for things
not explicitly specialized.

Apologies - what I meant included that, though was unclear.
 
std::set<K>::find doesn't use op==. It uses the comparator in a fashion
akin to !(key_comp(a,b) || key_comp(b,a)), that is, if neither key is
less than the other, it's by necessity equivalent.

Ah, I didn't know that, though it makes sense thinking about it. Thanks :-)

--
Rob Desbois
Blog: http://theotherbranch.wordpress.com/
"I disapprove of what you say, but I’ll defend to the death your right to say it", Voltaire