首頁 >後端開發 >C++ >如何為 C 無序容器中的自訂類型專門化 `std::hash::operator()`?

如何為 C 無序容器中的自訂類型專門化 `std::hash::operator()`?

Linda Hamilton
Linda Hamilton原創
2024-12-05 15:33:14337瀏覽

How Can I Specialize `std::hash::operator()` for Custom Types in C   Unordered Containers?

為無序容器中的使用者定義類型專門化std::hash::operator()

支援std:: 中的使用者定義鍵類型unordered_set;和std::unordered_map ,您需要提供運算子==(Key, Key) 和雜湊函子。

雖然只寫std::unordered_set 會更方便;使用類型X 的預設哈希,就像內建類型一樣,您可以專門化std::hash::operator()來實現此目的。

根據C 標準草稿N3242 §20.8.12 [unord.hash] 和§17.6.3.4 [hash.requirements],並在查閱各種資源後,專門以下方式的std::hash ::operator() 是正確且唯一的方法:

namespace std {
  template <> struct hash<Foo>
  {
    size_t operator()(const Foo &amp; x) const
    {
      /* your code here, e.g. "return hash<int>()(x.value);" */
    }
  };
}

這允許您向命名空間std新增專門化,並且是擴充功能的推薦方法使用者定義類型的標準類型。

以上是如何為 C 無序容器中的自訂類型專門化 `std::hash::operator()`?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn