簡體   English   中英

的unordered_map <Pointer, String> 在C ++中

[英]unordered_map for <Pointer, String> in C++

我正在嘗試為<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 ++有點陌生,所以一點幫助將是很大的!

請閱讀文檔: unordered_map::find返回一個對pair<xml_node const*, string>的迭代器。 (您不能將其傳遞給string構造函數。)而是這樣做:

auto iterator = label_hash.find(node);

if (iterator != label_hash.end()) { // `.find()` returns `.end()` if the key is not in the map
    string& lb = iterator->second; // The `&` is optional here, use it if you don't want to deepcopy the whole string.
    // use lb
}
else {
    // key not in the map
}

我寫了一個小測試程序:

#include <unordered_map>
#include <string>
namespace pugi
{ 
  struct xml_node {};
}

int main()
{
  std::unordered_map<pugi::xml_node*, std::string> mymap;

  pugi::xml_node n1;

  mymap.emplace(&n1, "foo");

  auto i = mymap.find(&n1);

  i->second;

  return 0;

}

這可以完美地編譯,這表明,疑似問題不在於使用指針作為映射鍵,沒有缺少自定義比較器和沒有哈希函數。

unordered_map :: find返回一個迭代器-指向鍵/值對。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM