// use for <key, T*> template<typename key_t, typename value_t> class ptrmap { public: typedef std::map<key_t,value_t> data_type; typedef typename data_type::iterator iterator; typedef typename data_type::const_iterator const_iterator; ~ptrmap() { clear(); } bool add(const key_t &key, const value_t val) { if(0 == get(key)) { data.insert(make_pair(key, val)); return true; } return false; } bool remove(const key_t &key) { auto it = data.find(key); if(data.end() == it) return false; delete it->second; data.erase(it); return true; } value_t get(const key_t &key) { auto it = data.find(key); if(data.end() == it) return (value_t)(0); else return it->second; } void clear() { for(auto it = begin(); it != end(); ++it) delete it->second; data.clear(); } size_t size() { return data.size(); } iterator begin() { return data.begin(); } iterator end() { return data.end(); } const_iterator begin() const { return data.begin(); } const_iterator end() const { return data.end(); } //map data data_type data; };