使用自定义 std::set 比较器
简介:
在排序和搜索算法中,自定义比较器用于指定容器中元素的替代排序。这允许根据特定条件进行自定义排序或搜索。让我们探索如何为 std::set 容器定义自定义比较器。
案例研究:
考虑一组整数,您希望按字典顺序而不是数字排序订购。这意味着即使“10000”在数值上更大,元素“1234”和“10000”也应被视为按顺序(按字典顺序)。
错误和解决方案:
您遇到的错误是因为 g 期望一个符合特定模板参数列表的比较器,特别是“template
解决方案:
有几种方法可以为 std 定义自定义比较器::设置:
1。现代 C 20 解决方案:
在 C 20 及更高版本中,您可以直接使用 lambda 函数作为比较器:
auto cmp = [](int a, int b) { return a < b; }; // Arbitrary example std::set<int, decltype(cmp)> s;
2.现代 C 11 解决方案:
在 C 11 及更高版本中,您可以将 lambda 函数与 set 构造函数一起使用:
auto cmp = [](int a, int b) { return a < b; }; // Arbitrary example std::set<int, decltype(cmp)> s(cmp);
3。函数对象:
您可以使用返回布尔值的operator()函数定义函数对象:
struct Compare { bool operator()(const int &a, const int &b) { return a < b; } // Arbitrary example }; std::set<int, Compare> s;
4. std::integral_constant:
您可以使用 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::set 容器定义自定义比较器?的详细内容。更多信息请关注PHP中文网其他相关文章!