set/multiset的常用介绍
set的介绍
set是一个key==value的关联容器,底层是用红黑树(一种平衡二叉树AVL)实现的。在插入,删除时动态维护红黑树来保持一个高效率的搜索。
特点:1、key==value
2、底层红黑书
3、值不重复
该类容器是自动排序的
set这个特殊的关联容器, iterator和const_iterator都是一样的,也就是说: set中的元素只可以读。
使用如下
定义和获取set类中的值
初始化
#include<set>
#include<string>
set<string> myset;
set<string> myset2(myset);
插入,删除,查找
//插入 insert(elem);//返回(iterator,bool)的pair,first是插入或已存在的指示器,second是是否插入成功 //删除 set 容器中值为 val 的元素 size_type erase (const value_type& val); //删除 position 迭代器指向的元素 iterator erase (const_iterator position); //删除 [first,last) 区间内的所有元素 iterator erase (const_iterator first, const_iterator last); /*其中,第 1 种格式的 erase() 方法,其返回值为一个整数,表示成功删除的元素个数;后 2 种格式的 erase() 方法,返回值都是迭代器,其指向的是 set 容器中删除元素之后的第一个元素。*/ //查找 find(key); //查找键key是否存在,若存在,返回该键的元素的迭代器;若不存在,返回set.end(); count(key);//查找键key的元素个数 lower_bound(keyElem);//返回第一个key>=keyElem元素的迭代器。 upper_bound(keyElem);//返回第一个key>keyElem元素的迭代器。 equal_range(keyElem); //返回容器中key与keyElem相等的上下限的两个迭代器。
自定义比较函数
Todo:一共三种实现方式
struct myComp
{
bool operator()(const int &a,const int &b)
{
return a>b;//降序
//return a<b;//升序
}
};
set<int,myComp>::iterator it;
遍历
set<int>::iterator it; for(it=s.begin();it!=s.end();it++) { cout<<*it<<" "; }
multiset与set只有key可重复的区别。

浙公网安备 33010602011771号