XML : unordered_map for

I am trying to create an unordered_map for <xml_node*,string> pair, where xml_node is an element of xml from pugixml library, and i wish to store its pointer as the key. I have declared the map like this :

  unordered_map<xml_node*,string> label_hash;    

Now the insert function is working well and good. But whenever I try to find an element from the hash like this :

  string lb = string(label_hash.find(node));    

I get the following error :

  no matching function for call to 'std::basic_string<char>::basic_string(std::_Hashtable<pugi::xml_node*, std::pair<pugi::xml_node* const, std::basic_string<char> >, std::allocator<std::pair<pugi::xml_node* const, std::basic_string<char> > >, std::_Select1st<std::pair<pugi::xml_node* const, std::basic_string<char> > >, std::equal_to<pugi::xml_node*>, std::hash<pugi::xml_node*>, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, false, false, true>::iterator)'|    

Now do I need to implement a hash function and equal function for the map? I was trying to implement them like follows but it doesn't work :

  struct hashing_func {      unsigned long operator()(const xml_node* key) const {          uintptr_t ad = (uintptr_t)key;          return (size_t)((13 * ad) ^ (ad >> 15));          //return hash<xml_node*>(key);      }  };    struct key_equal_fn {      bool operator()(const xml_node* t1, const xml_node* t2) const {          return (t1 == t2);      }  };    

I am a bit new to C++ so a little help would be great!

No comments:

Post a Comment