使用相同的函数对向量进行排序和集合中的自定义比较器

发布于 2025-01-04 23:44:49 字数 665 浏览 2 评论 0原文

这可能听起来像一个愚蠢的问题,但我想知道很长一段时间是否有更好的方法:

struct X
{
    int a;
    int b;
};
bool sortComp(const X first, const X second)
{
    if (first.a!=second.a)
        return (first.a<second.a);
    else
        return (first.b<second.b);

}
class setComp
{
public:
    bool operator() (const X first, const X second) const
    {
        if (first.a!=second.a)
                return (first.a<second.a);
            else
                return (first.b<second.b);
    }
};
int main()
{
    vector<X> v;
    set<X, setComp> s;
    sort(begin(v), end(v),sortComp);
}

如您所见,我实现了相同的功能两次,一次用于排序,一次用于集合中的隐式排序。有没有办法避免代码重复?

This might sound like a stupid problem but I wondered for a long time is there a better way that this:

struct X
{
    int a;
    int b;
};
bool sortComp(const X first, const X second)
{
    if (first.a!=second.a)
        return (first.a<second.a);
    else
        return (first.b<second.b);

}
class setComp
{
public:
    bool operator() (const X first, const X second) const
    {
        if (first.a!=second.a)
                return (first.a<second.a);
            else
                return (first.b<second.b);
    }
};
int main()
{
    vector<X> v;
    set<X, setComp> s;
    sort(begin(v), end(v),sortComp);
}

As you see I implement the same functionality twice, once for sorting, and once for implicit sorting in the set. Is there a way to avoid code duplication?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

2025-01-11 23:44:49

当然,只需选择两者之一并更改另一个的呼叫即可。

// choosing the function object
sort(begin(v), end(v), setComp()); // create setComp, sort will call operator()

// choosing the function
set<X, bool(*)(const X, const X)> s(sortComp); // pass function pointer

我个人会推荐函子版本。

Sure, just choose one of both and change the call of the other.

// choosing the function object
sort(begin(v), end(v), setComp()); // create setComp, sort will call operator()

// choosing the function
set<X, bool(*)(const X, const X)> s(sortComp); // pass function pointer

I personally would recommend the functor version.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文