C++ 为什么multiset使用运算符<;它存储的对象的名称?
在将自定义对象存储在多集上时,对象的类需要有一个操作符 我想解释一下multiset的内部工作原理,这样我就能理解为什么需要运算符<C++ 为什么multiset使用运算符<;它存储的对象的名称?,c++,stl,operator-overloading,multiset,C++,Stl,Operator Overloading,Multiset,在将自定义对象存储在多集上时,对象的类需要有一个操作符 我想解释一下multiset的内部工作原理,这样我就能理解为什么需要运算符
因为,<或>运算符无法比较某些对象。这是否意味着我无法将它们存储在multiset中。multiset是一个已排序的容器 它需要使用比较器来比较元素
使用类型
运算符在正常情况下不需要,
将是唯一可以检查相等性和顺序的运算符,不是吗?@super我不明白你的意思Compare
几乎可以是任何东西,唯一的限制是它是严格的弱排序。@超级容器通常不使用相等,而是使用等价,这就是!(a
(这不一定与a==b
相同)@super-egunordered\u set
使用=
(相等),当你习惯于通过进行等价时,这可能会有点令人惊讶,我不能不同意任何一点。不过,在我看来,使用
作为默认值似乎有很好的理由。这是直观的,因为它允许进行排序和等价性检查。
template<
class Key,
class Compare = std::less<Key>, // <<----
class Allocator = std::allocator<Key>
> class multiset;