專門為無序容器中的自訂類型使用std::hash
在std::unordered_set 和std::unordered_map 等在無序容器中,支援自訂鍵類型需要提供運算子==和雜湊函子。雖然使用自訂雜湊函子很方便,但也希望為類似於內建類型的自訂類型提供預設雜湊。
要實現這一點,可以專門化 std::hash
合法性
在std 命名空間中指定專業化是允許的,事實上,在某些情況下是鼓勵的喜歡this.
合規性
專門化std::hash 的正確方法是在std 命名空間中定義自訂結構。以下程式碼片段示範了正確的語法:
namespace std { template <> struct hash<Foo> { size_t operator()(const Foo &x) const { // Hashing logic for custom type } }; }
可移植性
這種專門化std::hash 的方法可以在g 和MSVC 等主要編譯器之間移植。
附加功能
分開從std::hash 中,我們也可以專門化其他函子,例如std::less、std::equal_to 和std: :swap 等自訂類型以增強功能。
結論
透過專門化std::hash,可以為無序容器中的自訂類型提供預設的雜湊函數,從而更方便地在標準庫容器中使用它們。這種方法既合法又可移植,同時遵守 C 11 標準。
以上是如何為 C 無序容器中的自訂類型提供預設雜湊函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!