首頁 > 後端開發 > C++ > 如何使用自訂使用者定義類型作為 C 映射中的鍵?

如何使用自訂使用者定義類型作為 C 映射中的鍵?

Mary-Kate Olsen
發布: 2024-12-29 05:16:15
原創
663 人瀏覽過

How Can I Use Custom User-Defined Types as Keys in C   Maps?

自訂使用者定義類型作為C 中的映射鍵

C 標準庫中的映射為鍵值提供高效的查找和插入操作對。然而,當嘗試使用使用者定義的類別作為映射鍵時,由於缺乏合適的比較函數,開發人員可能會遇到神秘的錯誤訊息。

一個常見的錯誤訊息是:「與『operator

預設情況下,映射使用 std::less 比較器模板參數來定義鍵的順序。如果鍵類型提供了operator

要解決這個問題,有幾種方法:

  1. 比較器Function Object:建立一個單獨的類別來實現特定於使用者定義類型的比較。在提供的程式碼中,使用operator()函數定義了Class1Compare類,該函數根據id成員比較Class1實例。

    struct Class1Compare
    {
       bool operator() (const Class1& lhs, const Class1& rhs) const
       {
          return lhs.id < rhs.id;
       }
    };
    登入後複製

    然後,在實例化映射時,將比較器函數物件指定為第三個範本參數:

    std::map<Class1, int, Class1Compare> c2int;
    登入後複製
  2. 模板特化std::less:另一個選擇是為您的使用者定義類型專門化std::less 範本。這允許您直接在 std 命名空間內定義比較邏輯。

    namespace std
    {
       template<>
       struct less<Class1>
       {
          bool operator() (const Class1& lhs, const Class1& rhs) const
          {
             return lhs.id < rhs.id;
          }
       };
    }
    登入後複製

    透過專門化 std::less,您可以避免暴露明確運算子

  3. 重載程式碼的其他部分,使比較邏輯更加封裝。

透過使用其中一種方法,您可以克服使用使用者定義類型作為映射鍵和增益的限制C 標準庫高效映射工具的優勢。

以上是如何使用自訂使用者定義類型作為 C 映射中的鍵?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板