Boost logo

Boost :

From: Joe Gottman (jgottman_at_[hidden])
Date: 2007-05-20 19:51:53

Johan Torp wrote:
> Is there any way to use boost::shared_ptrs as keys in associative
> containers and perform look up using raw pointers?
> What I want is something similar to this:
> std::map<boost::shared_ptr<int>, std::string> m;
> int i;
> m.find(&i);
> _______________________________________________

    Here's one possibility:

   struct raw_less
      bool operator()(const shared_ptr<int> &lhs, const shared_ptr<int>
        return lhs.get() < rhs.get();

std::map<boost::shared_ptr<int>, std::string, raw_less> m;

Now m will search using raw pointers. If you really want to, you could
do something like
  int i;
   m.find(boost_shared_ptr<int>(&i, null_deleter());

where null_deleter is a class with an operator() that takes a pointer
and does nothing. However, this will be fairly useless because if i is
not owned by a shared_ptr you will never find it inside the map.

Joe Gottman

Boost list run by bdawes at, gregod at, cpdaniel at, john at