如何从向量初始化集合并提供比较功能?

How to initialize a set from a vector and provide a compare function?

我需要获取向量的唯一元素,按函数中实现的条件排序。如您所见,矢量和结果集 "only" 包含对要排序的对象的引用。

只要我不使用比较函数,下面的最小示例就可以工作 ˋref_wrp_ltˋ.

#include <functional>
#include <set>
#include <vector>

template <class T> constexpr bool ref_wrp_lt(const std::reference_wrapper<T>&lhs, const std::reference_wrapper<T>&rhs)
{
    return lhs.get() < rhs.get();
}

class A
{
};

int main()
{
    std::vector<std::reference_wrapper<A>> my_vec = std::vector<std::reference_wrapper<A>>();
    std::set<std::reference_wrapper<A>, bool(*)(const std::reference_wrapper<A>&, const std::reference_wrapper<A>&)> my_set(my_vec.begin(), my_vec.end(), &ref_wrp_lt);
    return 0;
}

但是,当我提供它时,似乎我必须提供一个分配器。真的是这样吗?如果是,我怎么总是使用默认分配器?

P.S.: 我是 C++ 中的 STL 和面向对象编程的新手。

示例代码中缺少的部分是 class Aoperator<。添加它即。如下使代码可编译:

class A
{
    public:
    bool operator<(const A &other) {
        // TODO: add logic for comparison
        return false;
    }
};