c ++ set和shared_ptr

时间:2015-04-22 17:27:18

标签: c++ set shared-ptr

我喜欢X类:

class X {
    public:
        bool operator<(const SCN& other) const;
};

我有以下代码

std::multiset<std::shared_ptr<X>> m;

我的问题是:

  1. 如何订购m中的数据? X(shared_ptr)或X.operator的地址
  2. 对于这个m,如果我想从最小到最大的访问它的元素,可以使用以下代码吗?如果没有,怎么样?

    for (auto& i : m) {
        f(i);
    }
    

1 个答案:

答案 0 :(得分:7)

您的套装是根据您的key_type std::shared_ptr<X>订购的。由于std::shared_ptr<X>comparable,因此std::shared_ptr的排序为准。

为了便于参考,multiset定义为

template<
    class Key,
    class Compare = std::less<Key>,
    class Allocator = std::allocator<Key>
> class multiset;

可以看出,typename Comparestd::less<Key>std::less应该重载函数重载,这可能会实现为

constexpr bool operator()(const T &lhs, const T &rhs) const 
{
    return lhs < rhs;
}

lhsrhs都是T类型,在这种情况下是Key,这是我们实例化多重集的类型std::shared_ptr<X>