赞
踩
set和multiset会根据特定的排序准则,自动将元素排序。两者不同之处在于multiset 允许元素重复而 set 不允许。如下图:
使用set或multiset,必须先包含头文件:
#include <set>
上述两个类型都被定义为命名空间std内的class template:
namespace std {
template <typename T,
typename Compare = less<T>,
typename Allocator = allocator<T> >
class set;
template <typename T,
typename Compare = less<T>,
typename Allocator = allocator<T> >
class multiset;
}
其中T是能进行排序的数据类型。第二个参数是进行排序的规则,默认为升序(小于,<),第三个是内存分配器,不用管。
set 和multiset通常用平衡二叉树(balanced binary tree,确切说是红黑树)实现。这样在插入数据时能自动排序,使得查找元素时有良好性能。其查找函数具有对数O(logn)时间复杂度。
但是,自动排序也造成set和multiset的一个重要限制:你**不能直接改变元素值,**因为这样会打乱原本正确的顺序。
从其接口也能反映这种情况:
set和multiset不提供任何函数可以直接访问元素。
通过迭代器访问元素时都是常量。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。