使用自訂std::set 比較器
簡介:
簡介:在排序時和在搜尋演算法中,自訂比較器用於指定容器中元素的替代排序。這允許根據特定條件進行自訂排序或搜尋。讓我們探索如何為 std::set 容器定義自訂比較器。
案例研究:考慮一組整數,您希望按字典順序而不是數字排序訂購。這意味著即使“10000”在數值上更大,元素“1234”和“10000”也應被視為按順序(按字典順序)。
錯誤和解決方案: 您遇到的錯誤是因為g 期望一個符合特定模板參數列表的比較器,特別是“template
有幾種方法可以為 std 定義自訂比較器::設定:
1。現代C 20 解決方案:auto cmp = [](int a, int b) { return a < b; }; // Arbitrary example std::set<int, decltype(cmp)> s;
在C 20 及更高版本中,您可以直接使用lambda 函數作為比較器:
2.現代C 11 解:auto cmp = [](int a, int b) { return a < b; }; // Arbitrary example std::set<int, decltype(cmp)> s(cmp);
在C 11及更高版本中,您可以將 lambda 函數與 set 建構函數一起使用:
3。函數物件:struct Compare { bool operator()(const int &a, const int &b) { return a < b; } // Arbitrary example }; std::set<int, Compare> s;
您可以使用傳回布林值的operator()函數定義函數物件:
4. std::integral_constant:#include <type_traits> struct Compare { bool operator()(const int &a, const int &b) { return a < b; } // Arbitrary example }; using Cmp = std::integral_constant<decltype(&Compare::operator()), &Compare::operator()>; std::set<int, Cmp> s;
您可以使用std::integral_constant建立隱式轉換為函數指標的類型:
結論: 透過定義自訂比較器,您可以更好地控制元素的順序在在您的集合中,讓您實現特定的排序要求。以上是如何為 std::set 容器定義自訂比較器?的詳細內容。更多資訊請關注PHP中文網其他相關文章!