使用公共函数作为排序标准,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 不是有效的模板。
任何人都可以帮我通过 las 作为比较器吗?如果它不可能,你能告诉我任何解决方法而不触及班级本身。

回答

如果您不想使用 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;
}

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


回答

的第二个参数std::set需要是一个类型,而不是一个

它也必须是一个类型,其中comp(a, a)是一个有效的表达式,其中comp是比较类型a的值,是元素类型的值,所以我们不能直接使用指向成员函数的指针。

std::set<A, decltype(std::mem_fn(&A::less))> s(std::mem_fn(&A::less)));


以上是使用公共函数作为排序标准,C++;的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>