set or multiset
set or multiset
的特性是所有元素会根据元素的值自动排序,set是以RB-tree
(平衡树,红黑树的一种)为底层机制,其查找效果非常好。set
容器中不允许元素重复,multiset
容器允许元素重复
默认构造
set<类型, 比较器> set
#include<set>
set<T> set;
multiset<T> mset;// 从小到大
set<T,greater<T>> st2; // 从大到小
大小
int size();
bool empty();
插入删除
void insert(elem); //插入元素elem
void erase(elem); //删除值为elem的元素
void clear(); //清除所有元素
iterate erase(pos); //删除迭代器pos指向的元素,并且返回下个元素迭代器
itrate erase(beg,end); //删除区间[beg,end)的所有元素,并且返回下一个元素迭代器
查找
iterate find(key); //查找key是否存在,存在返回元素迭代器,不存在返回set.end()迭代器
iterate lower_bound(key); //返回>=key的第一个元素
iterate upper_bound(key); //返回>key的第一个元素
int count(key); // 返回key的个数,适配multiset,set也能用
自定义排序
创建一个类,类重载符号()
,定义时调用
class mycompare{
bool operate() (Mkey m1,Mkey m2) //Mkey是一个类,x是Mkey属性
{
return m1.x>m2.x;
}
}
set<Mkey,mycompare> s1;