首页 > 解决方案 > 使用公共函数作为排序标准,C++;

问题描述

考虑这个例子,我想要用作比较器的公共函数更少。
PS我知道如果我改变它operator<会起作用。

class A {
    std::string str;
    int id;
public:
    virtual bool less(A const& rhs) const{
        return id < rhs.id;
    }
};

int main()
{
    std::set<A, A::less> s;
}

这给了我一个错误,即 less 不是有效的模板。
任何人都可以帮我通过 lass 作为比较器吗?如果不可能,您能否在不触及课程本身的情况下告诉我任何解决方法。

标签: c++sortingsetfunctor

解决方案


如果您不想使用 operator< ,则可以使用像这样处理同情的包装器类型:

class A {
    std::string str;
    int id;
public:
    virtual bool less(A const& rhs) const{
        return id < rhs.id;
    }
};
struct A_wrapped{
    bool operator()(const A&a, const A&b) {
        return a.less(b);
    }
}

int main()
{
    std::set<A, A_wrapped> s;
}

这样做的好处是您不必向构造函数传递任何内容,类型定义足以告诉它您自己比较的用法。


推荐阅读