理解無序映射中的Pair 作為鍵
當嘗試創建以Pair 作為鍵的無序映射時,用戶可能會遇到編譯錯誤。此錯誤是由於自訂鍵類型pair缺少合適的雜湊函數而引起的。
為了解決這個問題,std::unordered_map 要求使用者提供專門為鍵類型設計的雜湊函數。此函數負責將鍵映射到唯一標識符,這對於快速且有效率的檢索至關重要。
實作自訂雜湊函數
一對 std::hash-able類型的最佳雜湊函數可以實作如下:
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; // Combine the hashes using a simple XOR } };
使用自訂雜湊函數
定義雜湊函數後,可以與std:: unordered_map 一起使用來解決編譯錯誤:
#include <unordered_map> #include <functional> #include <string> #include <utility> using Vote = std::pair<std::string, std::string>; using Unordered_map = std::unordered_map<Vote, int, pair_hash>; int main() { Unordered_map um; }
替代方案解決方案
為了獲得更廣泛的支援和更好的效能,請考慮使用 Boost 等函式庫。 Boost 提供:
透過利用這些選項,使用者可以確保std::unordered_map中的自訂鍵類型的可靠散列,實現高效且最佳的程式碼效能。
以上是如何在無序映射中使用對作為鍵?的詳細內容。更多資訊請關注PHP中文網其他相關文章!