【发布时间】:2016-04-12 09:02:13
【问题描述】:
我正在尝试为<xml_node*,string> 对创建一个unordered_map,其中xml_node 是来自pugixml 库的xml 元素,我希望将其指针存储为键。我已经这样声明了地图:
unordered_map<xml_node*,string> label_hash;
现在insert 功能运行良好。但每当我尝试find 来自散列的一个元素时:
string lb = string(label_hash.find(node));
我收到以下错误:
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)’|
现在我需要为地图实现哈希函数和相等函数吗?我试图按如下方式实现它们,但它不起作用:
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);
}
};
我对 C++ 有点陌生,所以能提供一点帮助会很棒!
【问题讨论】:
标签: c++ xml dictionary unordered-map pugixml