自訂使用者定義類型作為C 中的映射鍵
C 標準庫中的映射為鍵值提供高效的查找和插入操作對。然而,當嘗試使用使用者定義的類別作為映射鍵時,由於缺乏合適的比較函數,開發人員可能會遇到神秘的錯誤訊息。
一個常見的錯誤訊息是:「與『operator
預設情況下,映射使用 std::less 比較器模板參數來定義鍵的順序。如果鍵類型提供了operator
要解決這個問題,有幾種方法:
比較器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;
模板特化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,您可以避免暴露明確運算子
以上是如何使用自訂使用者定義類型作為 C 映射中的鍵?的詳細內容。更多資訊請關注PHP中文網其他相關文章!