Hello, namespace bi = boost::intrusive; typedef bi::set<relation, bi::constant_time_size<false> > set_type; set_type set; class relation: private boost::noncopyable, public bi::set_base_hook<optimize_size<true> > { public: boost::uuid const &get_uuid() const { return uuid_; } void change_uuid( boost::uuid const& uuid ) { unlink(); uuid_ = uuid; // TODO: reinsert it with the new uuid, // or leave it linked and find a way to tell the set, // that the value has been changed and the tree is // invalid } struct uuid_cmp { bool operator()( boost::uuid const &id, relation const &rel ) const { return id < rel.get_uuid(); } bool operator()( relation const &rel, boost::uuid const &id ) const { return rel.get_uuid() < id; } }; bool operator<( relation const &a ) const { return uuid_ < a.uuid_; } private: boost::uuid uuid_; } So the question is in the comment: Is there a way to change the value of an element of a set or insert an (new) element in a set, without having a pointer to the set? TIA, Raymond