STL 之 set的应用

关于set

    Set是STL中的一个容器,特点是其中包含的元素值是唯一的,set根据其底层实现机制分为hash存储和红黑树存储两种方式,这两种结构最本质的区别就是有序和无序,红黑树的存储是有序的而hash表是无序存储,但它并不影响set的最主要的用法就是查找,而从查找角度来说hash表是更优于红黑树,从时间复杂度进行分析,红黑树的时间复杂度为O(logN),而hash表的时间复杂度为O(1)。所以说hash表构建的set更高效。所以在对时间要求比较严格的情况下,可以优先采用hash表构建的set,即unordered_set。

    平衡二叉检索树的检索使用中序遍历算法,检索效率高于vector、deque、和list的容器。另外,采用中序遍历算法可将键值由小到大遍历出来,所以可以理解为平衡二叉检索树在插入元素时,就会自动将元素按键值从小到大的顺序排列。

    使用Set的主要目的是为了快速检索,特点是相同的值不存,存入的值按照顺序排列好。

    当集合中的元素增加时,搜索集合速度的变化趋势如下

    在set中查找是使用二分查找,也就是说,如果有16个元素,最多需要比较4次就能找到结果,有32个元素,最多比较5次。那么有10000个呢?最多比较的次数为log10000,最多为14次,如果是20000个元素呢?最多不过15次。当数据量增大一倍的时候,搜索次数只不过多了1次,多了1/14的搜索时间而已。明白这个道理后,就可以安心往里面放入元素了。

 

程序中应包含头文件

#include <set>

 

set常用操作

1.创建集合

set<int> s;

 

2.插入元素

s.insert(item);

 

3.正向访问元素

    使用迭代器iterator

set<int>::iterator it;

for (it = s.begin(); it != s.end(); it++) {
    cout << *it << endl;  
}

 

4.逆向访问元素

    使用逆向迭代器reverse_iterator

set<int>::reverse_iterator rit;

for (rit = rbegin(); rit != rend(); rit++){
    cout << *rit << endl;
}

 

5.删除元素

s.erase(item);
s.erase(it);  //it是指向集合中某元素的一迭代器,**使用之后尤其注意it迭代器指向的位置,set中的erase没有自检功能**

 

6.检索元素

set<int>::iterator it;
it = s.find(item); //查找集合中值为item的元素并把地址返回给迭代器it

 

7.检索某一元素是否存在于集合中

    count方法本身时检测集合中某一元素的出现次数,但在集合中不存在重复元素,因此count就变为检测元素是否存在的方法

s.count(item);

 

8.集合中的元素数

s.size();

 

9.检测集合是否为空

s.empty();

 

10.清除集合中的所有元素

s.clear();

 

Set常用函数:

  begin()                                     返回指向第一个元素的迭代器

  end()                                        返回指向最后一个元素的迭代器

  equal_range()                          返回集合中与给定值相等的上下限的两个迭代器

  get_allocator()                         返回集合的分配器

  lower_bound()                         返回指向大于(或等于)某值的第一个元素的迭代器

  key_comp()                              返回一个用于元素间值比较的函数

  max_size()                                返回集合能容纳的元素的最大限值

  rbegin()                                    返回指向集合中最后一个元素的反向迭代器

  rend()                                       返回指向集合中第一个元素的反向迭代器

  swap()                                      交换两个集合变量

  upper_bound()                        返回大于某个值元素的迭代器

  value_comp()                           返回一个用于比较元素间的值的函数

 

转载于:https://www.cnblogs.com/moujun1001/p/9298975.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STL中的set是一种有序集合,它的元素不重复且自动排序。set应用场景主要包括以下几个方面: 1. 快速查找:由于set中的元素是有序的,可以使用二分查找算法快速查找某个元素是否存在于set中。这在需要频繁查找元素的情况下非常有用。 2. 去重:当需要从一组元素中去除重复的元素时,可以使用set来实现去重功能。set会自动按照元素的大小进行排序,并且只保留一个副本。 3. 排序:set会按照元素的大小自动进行排序,所以当需要按照一定规则对元素进行排序时,可以使用set。这在需要保持元素有序的情况下非常方便。 4. 统计元素个数:set可以快速统计元素个数,通过set的size()函数可以获取当前set中的元素个数。 综上所述,STL中的set在需要快速查找、去重、排序和统计元素个数的场景下有着广泛的应用。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [【C++ - STLset、map、multiset、multimap 容器(介绍、使用、应用场景)](https://blog.csdn.net/weixin_48025315/article/details/125320130)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [Map和Set的区别](https://download.csdn.net/download/weixin_38556668/13749720)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值