首页 > 后端开发 > C++ > 如何在 C 中正确编译带有自定义比较器的集合?

如何在 C 中正确编译带有自定义比较器的集合?

Barbara Streisand
发布: 2024-12-21 00:56:10
原创
979 人浏览过

How to Correctly Compile a Set with a Custom Comparator in C  ?

使用自定义比较器编译集

尝试创建一组按字典比较而不是数字排序的整数时,编译时可能会出现问题with g .

遇到的错误是由于集合的模板参数类型不正确造成的。在提供的代码中:

set<int64_t, lex_compare> s;
登录后复制

lex_compare 不是类型而是函数。为了解决这个问题,我们需要根据 C 的模板要求创建一个比较器对象。

现代 C 解决方案

1. C 20 解决方案:

auto cmp = [](int64_t a, int64_t b) { return ... };
std::set<int64_t, decltype(cmp)> s;
登录后复制

Lambda 可以用作 C 20 中的比较器。lambda 应返回一个布尔值,指示元素的顺序。

2 。 C 11 解决方案:

auto cmp = [](int64_t a, int64_t b) { return ... };
std::set<int64_t, decltype(cmp)> s(cmp);
登录后复制

在 C 11 中,lambda 必须作为参数传递给集合构造函数。

传统解决方案

3。函数指针:

bool cmp(int64_t a, int64_t b) {
    return ...;
}
std::set<int64_t, decltype(cmp)*> s(cmp);
登录后复制

4.使用 Operator() 进行结构:

struct cmp {
    bool operator() (int64_t a, int64_t b) const {
        return ...
    }
};

std::set<int64_t, cmp> s;
登录后复制

5.布尔函数的结构:

bool cmp(int64_t a, int64_t b) {
    return ...;
}

#include <type_traits>
using Cmp = std::integral_constant<decltype(&cmp), &cmp>;
std::set<int64_t, Cmp> set;
登录后复制

以上是如何在 C 中正确编译带有自定义比较器的集合?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板