簡介
當嘗試使用以使用者定義的類別作為鍵的STL 映射時,程式設計師可能會遇到神秘的問題錯誤訊息,阻礙他們的進步。本文深入探討了此錯誤背後的原因,並探討了有效使用 std::maps 的替代方法。
神秘錯誤和原因
如提供的範例所示,使用使用者定義類型作為映射鍵會引發錯誤,因為編譯器無法為特定類型找到合適的比較運算符。在這種情況下,std::map 依賴運算子
替代方法
1.比較器函數物件:
避免該錯誤的一種方法是定義一個比較器函數對象,該對象實現運算子
例如,以下程式碼片段使用比較器函數物件來比較和排序 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::map 的預設比較行為的無縫集成,而無需暴露顯式的運算符
namespace std { template<> struct less<Class1> { bool operator() (const Class1& lhs, const Class1& rhs) const { return lhs.id < rhs.id; } }; }
透過採用這些替代方案中的任何一個,程式設計師可以有效地將std::map 與使用者定義的類型鍵一起使用,從而消除對顯式運算子
以上是為什麼在使用使用者定義類型作為「std::map」中的鍵時會出現隱密錯誤,以及如何修復這些錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!