將std::hash 專門用於無序容器中的使用者定義類型
啟用std::unordered_set 中自訂鍵類型的使用和std::unordered_map 一樣,必須同時提供相等運算子和雜湊函數。這通常涉及定義實作這些運算符的自訂結構或類別。不過,對於使用者定義的類型,使用預設的雜湊函數會更方便,類似於編譯器和函式庫提供的內建類型。
根據 C 標準草稿 N3242 和 Boost.Unordered ,可以將 std::hash 專門化為自訂類型。這涉及到向std 命名空間添加專門化:
namespace std { template <> inline size_t hash<X>::operator()(const X& x) const { return hash<int>()(x.id); } }
在此範例中,類型X 的雜湊函數專門用於使用int 類型的雜湊函數,它假設X 有一個成員變數id 。需要注意的是,雜湊函數必須專門針對特定的模板參數類型,並且產生的雜湊值必須與該類型的相等運算子一致。
合法性和可移植性:
namespace std { template <> struct hash<X> { size_t operator()(const X& x) const { return hash<int>()(x.id); } }; }
以上是如何在 C 中為我的使用者定義類型專門化「std::hash」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!