9.set or multiset

set or multiset

  • set or multiset的特性是所有元素会根据元素的值自动排序,set是以RB-tree(平衡树,红黑树的一种)为底层机制,其查找效果非常好。set容器中不允许元素重复,multiset容器允许元素重复

默认构造

set<类型, 比较器> set

#include
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; 

你可能感兴趣的:(STL,c++,算法)