2
我正在嘗試使用自定義鍵創建映射,該鍵是對象的指針地址,如前所述。使用指針地址作爲鍵的Unordered_map
我需要的地址,因爲現在它是唯一相關的方式來比較兩個對象。
從我的理解,這樣做的正確方法是使用const char*
關鍵
這裏是typedef
:
typedef __gnu_cxx::unordered_map<const char*, std::string> TargetsTags;
我有點困惑了以下內容:
我該如何創建operator()
?
這是我用來std::string
:
namespace __gnu_cxx {
template<>
struct hash<std::string>
{
hash<const char*> h;
size_t operator()(const std::string &s) const
{
return h(s.c_str());
};
};
}
什麼const char*
?
這是做這件事的正確方法嗎?
您發現'__gnu_cxx'這兩個前導下劃線?這基本上意味着它是一個*私人*符號。如果您的編譯器和標準庫對於C++ 11來說比較陳舊,那麼使用'std :: tr1'命名空間及其頭文件,並且如果您的編譯器和庫不支持TR1,則使用Boost。 – 2015-04-05 13:42:53
至於使用指針作爲關鍵,不要。即使你有兩個指向內存的字符串,除了它們是兩個不同的分配,它不會工作。哈希是在*指針*上完成的,而不是它們指向的內容。 – 2015-04-05 13:45:30
@JoachimPileborg感謝您的評論,但我現在必須使用指針作爲鍵。至於'__gnu_cxx',你是對的。 – Itzik984 2015-04-05 13:54:30