STL—set(集合容器)

set具有以下特点:

  1、元素唯一,就是说不能插入重复的键值。
  2、插入元素自动按从小到大排序(可以利用重载符定义比较规则)。
  3、不能直接修改元素,否则会导致内部位置变化。
  4、构造set容器主要是为了快速检索

头文件
#include<set>

:set 和 multiset 都包含在该头文件内,而且 multiset 和 set 操作基本一样。其区别无外乎一下三点:
  1、multiset允许插入相同键值;
  2、multiset 用erase()按照键值删除元素时,会删除所有键值相同的元素,
  3、multiset 中find()会返回重复键值中第一个元素的迭代器。

定义和初始化
int a[]={1,2,3,4,5,3};
set<int> s;       //这样就完事了,定义了一个int类型的空的set对象s
set<int> s(a,a+6);//定义对象s,并将数组a中的前6个元素插入s
set<int> st(s);   //复制构造函数,st是s的副本,s必须是set对象
利用insert插入元素
s.insert(a,a+4)    //将数组a的前4个元素插入s
s.insert(8);       //参数也可以是变量表达式,比如 i+1
利用iterator遍历元素
 set<int>::iterator it;
 for(it=s.begin();it!=s.end();it++)
 {
     cout<<*it<<endl;
 }

注:注:set 对象不可以用下标运算符 [] 遍历,反向遍历则需要用到reverse_iterator,rbegin和rend。

删除或清空元素
s.erase(3);           //删除键值为3的元素,返回被删元素的个数
s.erase(it);          //删除迭代器it所指元素,返回指向下一元素的迭代器
s.erase(it_1,it_2);   //删除迭代器所指区间的所有元素,返回指向下一元素的迭代器
s.clear()             //清空集合元素

:按键值删除元素,erase()会返回删除元素的个数,这个功能在multiset中用比较有意义。

元素查询
s.find(n);          //找到则返回指向元素 n的迭代器,否则返回end();
s.lower_bound(n)    //返回第一个大于或等于 n的元素的迭代器
s.upper_bound(n)    //返回第一个大于 n的元素的迭代器
利用重载符定义比较规则
非结构体定义:
   struct comp
   {
       bool operator () (const int &a,const int &b)
       {
           return a>b;//大顶堆
       }
   };
   引用 :set<int,comp> s;
结构体定义:
   struct lei
   {
       int x;
       int y;
       bool operator < (const lei &a)const
       {
           return a.x>x;  //以结构体中的x,做比较元素
       }
   }; 
   引用:set<lei> s;
其他常用操作
s.size();  //返回元素个数
s.empty(); //判断是否为空,空返回真,否则返回假
s.count(); //返回给定元素出现的次数,用在multiset中较多
待续~~~
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值