C++STL之set

set
set翻译为集合,是一个内部自动有序且不含重复元素的容器。默认是升序。
底层采用红黑树实现。
set的定义:set<’typename’> s,降序的定义方式为
set<typename,greater<typename>> s。
typename可以是任意类型包括STL容器。Set数组的定义方式为,set<typename> s[size].s[0]…s[size-1]都是set类型。迭代器的定义方式
set<typename>::iterator it
set容器内元素的访问:set只能通过迭代器(iterator)访问。
set常用函数
(1insert(x)可将x插入set容器中,并且自动递增排序和去重,
时间复杂度O(logN),其中Nset中元素的数量。
(2) find(x)返回set中对应值为x的迭代器,时间复杂度O(logN),
Nset内元素的个数。
(3) erase(),erase有两种用法:删除单个元素,删除一个区间内的所有元素。
删除单个元素有两种方式,erase(it)删除该迭代器对应的元素,
时间复杂度O(1),erase(x)删除该元素,时间复杂度O(logN)
删除一个区间的元素,erase(st,ed),删除区间[st,ed)内的元素,
时间复杂度O(ed-st)4size(),用来获得set内元素的个数,时间复杂度O(1)5clear(),用来清空set中所有元素,复杂度O(N),其中Nset内元素的个数。
(6count(x),返回set中x的数量
set<int> st ;
    st.insert(3) ;
    st.insert(3) ;
    st.insert(3) ;
    st.insert(1) ;
    st.insert(4) ;
    st.insert(4) ;
    st.insert(4) ;
    st.insert(4) ;
    st.insert(2) ;
    st.insert(2) ;
    cout << st.size() << endl ;
    cout << st.count(4) << endl ;//set去重了,返回只能是0或1
    cout << *st.find(1) << endl ;
    st.erase(1) ;
    st.erase(st.begin(),st.find(4)) ;
    for(auto ele : st) cout << ele << ' ' ;
    puts("") ;
    st.clear() ;
    cout << st.size() << endl ;
set的常见用途:
set最主要的作用是自动去重并且升序排序,因此碰到需要去重但不方便开数组的
时候,可以尝试用set解决。
注意:set中的元素是唯一的,如果需要处理不唯一的情况可以使用multiset。
C++11中还增加了unordered_ set,以散列代替set内部的红黑树,
unordered_set可以处理需要去重但是不需要排序的情况,
速度比set快得多。Multiset和unordered_set的定义和常用函数和set类似。


作者:就是要AC
链接:https://www.acwing.com/file_system/file/content/whole/index/content/2211515/
来源:AcWing
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值