我喜欢X类:
class X {
public:
bool operator<(const SCN& other) const;
};
我有以下代码
std::multiset<std::shared_ptr<X>> m;
我的问题是:
对于这个m,如果我想从最小到最大的访问它的元素,可以使用以下代码吗?如果没有,怎么样?
for (auto& i : m) {
f(i);
}
答案 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 Compare
是std::less<Key>
,std::less应该重载函数重载,这可能会实现为
constexpr bool operator()(const T &lhs, const T &rhs) const
{
return lhs < rhs;
}
lhs
和rhs
都是T
类型,在这种情况下是Key
,这是我们实例化多重集的类型std::shared_ptr<X>