Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么multiset使用运算符<;它存储的对象的名称?_C++_Stl_Operator Overloading_Multiset - Fatal编程技术网

C++ 为什么multiset使用运算符<;它存储的对象的名称?

C++ 为什么multiset使用运算符<;它存储的对象的名称?,c++,stl,operator-overloading,multiset,C++,Stl,Operator Overloading,Multiset,在将自定义对象存储在多集上时,对象的类需要有一个操作符 我想解释一下multiset的内部工作原理,这样我就能理解为什么需要运算符

在将自定义对象存储在多集上时,对象的类需要有一个操作符

我想解释一下multiset的内部工作原理,这样我就能理解为什么需要运算符<


因为,<或>运算符无法比较某些对象。这是否意味着我无法将它们存储在multiset中。

multiset是一个已排序的容器

它需要使用比较器来比较元素


使用类型
运算符在正常情况下不需要
将是唯一可以检查相等性和顺序的运算符,不是吗?@super我不明白你的意思
Compare
几乎可以是任何东西,唯一的限制是它是严格的弱排序。@超级容器通常不使用相等,而是使用等价,这就是
!(a
(这不一定与
a==b
相同)@super-eg
unordered\u set
使用
=
(相等),当你习惯于通过
进行等价时,这可能会有点令人惊讶,我不能不同意任何一点。不过,在我看来,使用
作为默认值似乎有很好的理由。这是直观的,因为它允许进行排序和等价性检查。
template<
    class Key,
    class Compare = std::less<Key>,    // <<----
    class Allocator = std::allocator<Key>
> class multiset;