C++ 设置和 shared_ptr

c++ set and shared_ptr

我有 class X 喜欢:

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

然后我有以下代码:

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

我的问题是:

  1. m中的数据是如何排序的? X(shared_ptr)X.operator< 的地址?如果是按地址 X 订购,我怎样才能按 X.operator< 订购?

  2. 对于这个m,如果我想从小到大访问它的元素,下面的代码能保证吗?如果没有,怎么办?

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

您的套装是根据您的 key_type 排序的,即 std::shared_ptr<X>。因为你的 std::shared_ptr<X>comparable, the ordering of the 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,这是我们实例化多重集的类型 [=12] =].