首頁 >後端開發 >C++ >如何在 C 中使用使用者定義類型作為 std::maps 中的鍵?

如何在 C 中使用使用者定義類型作為 std::maps 中的鍵?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-22 18:14:14779瀏覽

How Can I Use User-Defined Types as Keys in std::maps in C  ?

克服障礙:使用帶有使用者定義類型的std::map 作為鍵

在C 中映射鍵值對領域,首選使用者定義類型來定義鍵的情況並不罕見。但是,當嘗試將 std::maps 與使用者定義的鍵一起使用時,編譯期間可能會出現神秘的錯誤訊息。為了理解這個錯誤及其重要性,讓我們深入研究 std::maps 和使用者定義類型的細微差別。

使用 std::maps 時,我們經常依賴原始類型作為鍵,例如整數或字串。基元類型具有明確定義的比較運算子(、== 等),有助於在映射內進行高效的鍵排序。但是,當使用使用者定義的類型作為鍵時,需要注意的是,這些比較運算子的實作對於映射的正確運作至關重要。這就是您遇到的錯誤訊息發揮作用的地方。

問題中提到的錯誤暗示缺少運算子

使用者定義的 Class1 的實作。預設情況下,std::maps 依賴 less 。比較鍵的模板。少內部呼叫運算子要解決這個問題,有幾個可行的解決方案:
  1. 實現運算符<:> Define操作員使用比較器函數物件:
  2. 不要實作運算子
    struct Class1Compare {
        bool operator() (const Class1& lhs, const Class1& rhs) const {
            return lhs.id < rhs.id;
        }
    };
    
    std::map<Class1, int, Class1Compare> c2int;
    1. 專門化std::less:
    2. 如果比較語意對您的使用並不重要在在這種情況下,請考慮將std::less 模板專門用於Class1。這種方法允許在 Class1 範圍之外定義比較標準,從而使程式碼更具可擴展性。
    namespace std {
        template<> struct less<Class1> {
            bool operator() (const Class1& lhs, const Class1& rhs) const {
                return lhs.id < rhs.id;
            }
        };
    }

    透過採用其中一種方法,您可以克服錯誤並成功利用 std: :以使用者定義類型作為鍵的對應。選擇最符合您的專案要求和設計原則的解決方案非常重要。

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

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