
On Tue, Dec 13, 2011 at 12:52:33PM +0000, Rob Desbois wrote:
On 13 December 2011 10:07, Igor R
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. In any way, if you can change the type of the set, you can provide a custom comparator. 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. -- Lars Viklund | zao@acc.umu.se