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可重复的区别。

 

posted @ 2020-10-26 22:37  点金spe  阅读(126)  评论(0)    收藏  举报