template obj_type hashmap::get_set_elem(obj_type t_obj, string s_key) { typename hashmap::iterator iter = this->find(s_key); if ( iter == this->end() ) { set_elem(t_obj, s_key); return obj_type(); } obj_type t_ret = iter->second; iter->second = t_obj; return t_ret; } template void hashmap::set_elem(obj_type t_obj, string s_key) { (*this)[s_key] = t_obj; } template obj_type hashmap::get_elem(string s_key) { typename hashmap::iterator iter = this->find(s_key); if ( iter != this->end() ) return iter->second; return obj_type(); } template vector* hashmap::get_key_vector() { vector* p_vec = new vector; typename hashmap::iterator iter; for ( iter = this->begin(); iter != this->end(); ++iter ) p_vec->push_back(iter->first); return p_vec; } template bool hashmap::exists(string s_key) { return this->find(s_key) != this->end(); } template void hashmap::run_func( void (*func)(obj_type) ) { typename hashmap::iterator iter; for ( iter = this->begin(); iter != this->end(); ++iter ) ( *func ) ( iter->second ); } template void hashmap::run_func( void (*func)(obj_type, void*), void* v_arg ) { typename hashmap::iterator iter; for ( iter = this->begin(); iter != this->end(); ++iter ) ( *func ) ( iter->second, v_arg ); }