在無序映射中使用對作為鍵
嘗試聲明鍵為對的 unordered_map 時 (Vote =pair
Implicit instantiation of undefined template 'std::__1::hash, std::__1::basic_string > >'
出現此錯誤是因為 unordered_map 依賴於針對其鍵類型定制的雜湊函數。由於預設的雜湊函數不適用於對,因此您必須提供自訂雜湊函數。
例如,考慮以下自訂雜湊函數(pair_hash):
struct pair_hash { template <class T1, class T2> std::size_t operator() (const std::pair<T1, T2> &p) const { auto h1 = std::hash<T1>{}(p.first); auto h2 = std::hash<T2>{}(p.second); return h1 ^ h2; } };
此雜湊函數使用 XOR 運算子組合該對組件的雜湊值。要使用它,請按如下方式修改 unordered_map 聲明:
using Vote = std::pair<std::string, std::string>; using Unordered_map = std::unordered_map<Vote, int, pair_hash>;
此方法允許透過提供合適的雜湊函數來建立以對作為鍵的無序映射。然而,值得注意的是,這種簡單的實作可能無法表現出最佳的雜湊屬性,請考慮探索 Boost 的 hash_combine 函數或設定 hash_value 以獲得改進的結果。
以上是如何在 C 中使用對作為無序映射中的鍵?的詳細內容。更多資訊請關注PHP中文網其他相關文章!