1.结构
set和multiset会根据特定的排序原则将元素排序。两者不同之处在于,multisets允许元素重复,而set不允许重复。
![技术分享图片](http://image.bubuko.com/info/201804/20180414223643625588.png)
set中的元素可以是任意类型的,但是由于需要排序,所以元素必须有一个序,即大小的比较关系,只要是assignable、copyable、comparable(根据某个排序准则)的型别T,都可以成为set或者multisets的元素。
2.底层实现
和所有的标准关联容器类似,sets和multisets通常以平衡二叉树完成。
![技术分享图片](http://image.bubuko.com/info/201804/20180414223643803329.png)
自动排序的主要优点在于使二叉树搜寻元素具有良好的性能,在其搜索函数算法具有对数复杂度。但是自动排序也造成了一个限制,不能直接改变元素值,因为这样会打乱原有的顺序,要改变元素的值,必须先删除旧元素,再插入新元素。所以sets和multisets具有以下特点:
*不提供直接用来存取元素的任何操作元素
*通过迭代器进行元素的存取。
c++ STL中的set和multiset
原文:https://www.cnblogs.com/xiaobaituyun/p/8836160.html