一、关于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是指向集合中某元素的一迭代器

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/Gzu_zb/p/9372517.html

STL之set的应用相关推荐

  1. STL库(C++11)提供的异步执行方法的方式

    在进行并发编程的时候难免会遇到异步执行时候,现代C++标准库提供了几种异步执行的方式,本文收集整理了一下,以备将来翻阅. Thread方式 Thread 是STL提供的一种快捷创建线程的方式,极大方便 ...

  2. C++ 笔记(24)— STL map 类(map实例化、插入、查找、删除)

    1. STL 映射类简介 map 和 multimap 是键-值对容器,支持根据键进行查找,区别在于,后者能够存储重复的键,而前者只能存储唯一的键. 为了实现快速查找, STL map 和 multi ...

  3. C++ 笔记(23)— STL vector 类(实例化 vector、末尾插入、指定位置插入、数组方式访问元素、指针方式访问元素、删除元素、大小与容量区别)

    1. vector 特点 vector 是一个模板类,提供了动态数组的通用功能,具有如下特点: 在数组末尾添加元素所需的时间是固定的,即在末尾插入元素的所需时间不随数组大小而异,在末尾删除元素也如此: ...

  4. C++ 笔记(22)— STL string 类(字符串赋值、访问、拼接、查找、翻转、大小写转换)

    1. 实例化和赋值 STL string #include <string> #include <iostream>int main () {using namespace s ...

  5. C++ 笔记(19)— 标准模板库(STL容器、STL迭代器、STL算法、STL容器特点、STL字符串类)

    C++ 标准库可以分为两部分: 标准函数库: 这个库是由通用的.独立的.不属于任何类的函数组成的.函数库继承自 C 语言. 面向对象类库: 这个库是类及其相关函数的集合. C++ 标准库包含了所有的 ...

  6. STL map 简介

    STL map 简介 转载于:http://www.cnblogs.com/TianFang/archive/2006/12/30/607859.html 1.目录 map简介 map的功能 使用ma ...

  7. 【STL源码剖析读书笔记】【第5章】关联式容器之hashtable

    1.hashtable在插入.删除.搜寻操作上具有"常数平均时间"的表现,不依赖输入元素的随机性. 2.hashtable通过hashfunction将元素映射到不同的位置,但当不 ...

  8. C++ stl vector介绍

    转自: STL vector用法介绍 介绍 这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作.本文中还讨论了条件函数和函数指针在迭代算法中使用,如在remove_if ...

  9. STL vector list deque区别与实现

    1 vector 向量 相当于一个数组     在内存中分配一块连续的内存空间进行存储.支持不指定vector大小的存储.STL内部实现时,首先分配一个非常大的内存空间预备进行存储,即capacitu ...

  10. 用法 stl_51Nod 2160 数字游戏 STL基本用法

    目录 目录 1. 题目描述 1.1. Limit 1.2. Problem Description 1.3. Input 1.4. Output 1.5. Sample Input 1.6. Samp ...

最新文章

  1. 一文弄懂元学习 (Meta Learing)(附代码实战)《繁凡的深度学习笔记》第 15 章 元学习详解 (上)万字中文综述
  2. hdu 4738 2013杭州赛区网络赛 桥+重边+连通判断 ***
  3. leetcode算法题--用两个栈实现队列
  4. 2020前三季度各省市人均收入来了!看看你的家乡排第几?
  5. 动态规划—01背包问题
  6. html meta页面自适应,【转载·收藏】 html5手机网站自适应需要加的meta标签
  7. Linux文件属性之r、w、x
  8. 分布式Session解决方案_Token + Redis
  9. c++ websocket客户端_websocket使用
  10. qn模块java脚本_Qn271 对于网络编程 反射 IO 线程的一些一本入门程序 多多联系会加快 速度 WinSock-NDIS 269万源代码下载- www.pudn.com...
  11. Ubuntu中让SSH自动重连
  12. 酷客多郝宪玮:不够小程序化的企业,将错失最近5年的流量红利
  13. Azure PowerShell (9) 使用PowerShell导出订阅下所有的Azure VM的Public IP和Private IP
  14. ios 图片逆时针旋转_iOS 图片旋转方法实例代码
  15. 光伏谋定生态农村-农业大健康·万祥军:太阳能改革生产方
  16. 16.4 weak_ptr简介、weak_ptr常用操作与尺寸问题
  17. backdrop-filter
  18. 软件测试英语doc,软件测试英语单词.doc
  19. 性格心理学——邹宏明
  20. Kubernetes格式化输出:custom-columns

热门文章

  1. neovim--ubuntu安装
  2. 刷新报表页面的方法总结
  3. .net 怎么使用github_超快组装软件的使用hifiasm软件
  4. CS224N笔记——机器翻译和GRU以及LSTM
  5. [转载]Qlist的用法
  6. Redis安装(源码安装)
  7. Android应用框架之Activity
  8. boost-同步-互斥量类型
  9. Windows2008R2的NFS
  10. 打造适合 Ruby on Rails 开发的 Sublime Text