首頁 > 後端開發 > C++ > 如何為 std::set 容器定義自訂比較器?

如何為 std::set 容器定義自訂比較器?

Susan Sarandon
發布: 2024-12-17 10:37:25
原創
799 人瀏覽過

How to Define a Custom Comparator for the std::set Container?

使用自訂std::set 比較器

簡介:

簡介:

在排序時和在搜尋演算法中,自訂比較器用於指定容器中元素的替代排序。這允許根據特定條件進行自訂排序或搜尋。讓我們探索如何為 std::set 容器定義自訂比較器。

案例研究:

考慮一組整數,您希望按字典順序而不是數字排序訂購。這意味著即使“10000”在數值上更大,元素“1234”和“10000”也應被視為按順序(按字典順序)。

錯誤和解決方案:

您遇到的錯誤是因為g 期望一個符合特定模板參數列表的比較器,特別是“template類別std::set」。在你的程式碼中,「lex_compare」不是一個可以履行 _Compare 作用的型別。

解決方案:

有幾種方法可以為 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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板