克服障礙:使用帶有使用者定義類型的std::map 作為鍵
在C 中映射鍵值對領域,首選使用者定義類型來定義鍵的情況並不罕見。但是,當嘗試將 std::maps 與使用者定義的鍵一起使用時,編譯期間可能會出現神秘的錯誤訊息。為了理解這個錯誤及其重要性,讓我們深入研究 std::maps 和使用者定義類型的細微差別。
使用 std::maps 時,我們經常依賴原始類型作為鍵,例如整數或字串。基元類型具有明確定義的比較運算子(、== 等),有助於在映射內進行高效的鍵排序。但是,當使用使用者定義的類型作為鍵時,需要注意的是,這些比較運算子的實作對於映射的正確運作至關重要。這就是您遇到的錯誤訊息發揮作用的地方。
問題中提到的錯誤暗示缺少運算子
使用者定義的 Class1 的實作。預設情況下,std::maps 依賴 less 。比較鍵的模板。少內部呼叫運算子要解決這個問題,有幾個可行的解決方案:struct Class1Compare { bool operator() (const Class1& lhs, const Class1& rhs) const { return lhs.id < rhs.id; } }; std::map<Class1, int, Class1Compare> c2int;
namespace std { template<> struct less<Class1> { bool operator() (const Class1& lhs, const Class1& rhs) const { return lhs.id < rhs.id; } }; }
以上是如何在 C 中使用使用者定義類型作為 std::maps 中的鍵?的詳細內容。更多資訊請關注PHP中文網其他相關文章!