【c++】STL之set用法总结

介绍

  1. set和multiset会根据特定准则将元素自动排序(从小到大)。两者的不同之处在于multiset允许元素重复而set不允许。
  2. 所以不能直接改变元素值,因为这样会打乱原本正确的顺序。因此要改变元素值必须先删除旧元素,再插入新元素。
  3. C++ STL中标准关联容器set, multiset, map, multimap内部采用的就是一种非常高效的平衡检索二叉树:红黑树,也成为RB树(Red-Black Tree)。RB树的统计性能要好于一般平衡二叉树,所以被STL选择作为了关联容器的内部结构。

用法

1 头文件

#include<set>

2 非更易型操作,用来查询大小互相比较

  • c.key_comp()
  • c.value_comp()
  • c.empty()——返回容器是否为空
  • c.size()——返回目前元素的个数
  • c.max_size()——返回元素个数之最大可能量
  • c1==c2
  • c1!=c2

3 查找

  • c.count(val)——返回元素值为val的元素个数,有些就没有count函数,比如vector之类的容器没有count
  • c.find(val)——返回元素值为val的第一个元素,如果找不到就返回end()

4.迭代器

  • begin(); // 返回指向第一个元素的迭代器
  • end(); // 返回指向最后一个元素的迭代器
  • rbegin()–返回指向集合中最后一个元素的反向迭代器
  • rend()–返回指向集合中第一个元素的反向迭代器

5 插入和移除

  • c.insert(val)
  • c.insert(pos,val)
  • c.insert(beg,end)
  • c.erase(val)——移除与val相等的所有元素,返回被移除的元素的个数
  • c.erase(pos)——移除iterator位置pos上的元素,无返回值
  • c.erase(beg,end)
  • c.clear()——移除所有元素,将容器清空

6 计算set以及multiset的交集,并集和差集

  • 计算这些集合的函数不在头文件set中,需要包含头文件<algorithm>
  • 计算交集——set_intersection(x1.begin(), x1.end(), x2.begin(), x2.end(), inserter(C, C.begin()));——计算x1,x2的差集,结果保存在c中
  • 计算并集——set_union(x1.begin(), x1.end(), x2.begin(), x2.end(), inserter(C, C.begin()));——计算x1,x2并集,结果保存在c中
  • 计算差集——set_difference(x1.begin(), x1.end(), x2.begin(), x2.end(), inserter(C, C.begin()));计算x1,x2差集,结果保存在c中
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值