set的使用

news/2024/7/7 19:19:13

set,顾名思义,它是一个集合,它当中没有重复的元素,并按照顺序排列好
使用场景 : set一般用于查找问题中的查找有无,即给定一个元素判断这个元素是否存在于这个数组中。还可以用来删除数组中特定的数(因为复杂度低),配合set中的lower_bound()函数使用;
头文件 : #include < set >
定义 : set< typename > s //这里的typename可以是任何一种数据类型
使用

	s.insert(x); //插入一个元素,复杂度为log(n) 
	s.erase(x);  //删除一个元素,复杂度为log(n)   在遍历时删除的话,先用一个变量存当前的值,先让迭代器++,再删除
	s.size();    //返回当前set中的大小 
	s.empty();   //判断set是否为空,为空返回true 
	s.begin() ;  //返回set第一个元素的迭代器,注意不是数值 
	s.end();     //返回set最后一个元素下一位置的迭代器 
	s.find(x);    //返回x在set中的迭代器,若不存在则返回s.end()

set的遍历
首先我们需要定义set的一个迭代器来进行遍历

	set<int>::iterator it;   //定义迭代器
	for(it=s.begin();it!=s.end();it++)
	{
		cout << *it << " ";    //注意是迭代器,需要加上*才可以输出值
	}

set的lower_bound和upper_bound函数
lower_bound(x):返回set中第一个大于等于x的迭代器
upper_bound(x):返回set中第一个大于x的迭代器

	cout << *s.lower_bound(x) << endl;
	cout << *s.upper_bound(x) << endl;
	cout << *--s.lower_bound(x) << endl;      //输出set中比x小的最大的元素
	s.earse( *s.lower_bound(x) );      //删除set中第一个大于等于x的值

set的元素更新
更新集合里面的元素值时,一定要先删除,再更新,最后再插入。若直接更新,则序无法保证。若先更新,则无法删除对应的元素。所以必须先删除,再更新,最后再插入

multiset的使用
set里面不允许有重复的元素,但是我们要是希望解除掉这个束缚,用multiset就可以了
使用的话跟set没有区别,只要在声明的时候用multiset即可

	multiset<int> s 

http://www.niftyadmin.cn/n/1037393.html

相关文章

LongAdder是啥?

本文源码研究基于jdk1.8 阅读ConcurrentHashMap源码的时候发现了很多CountCell&#xff0c;看不太懂&#xff0c;所以先来研究一下LongAdder。 LongAdder是啥&#xff1f; LongAdder是用来做线程安全的i自增操作的&#xff0c;我们知道AtomicLong也可以现实这个功能&#xff0…

ConcurrentHashMap-属性解释

ConcurrentHashMap-属性解释 代表hashmap最大能存这么多个键值对 高两位目的是为了控制&#xff1f;知道的评论区说下 private static final int MAXIMUM_CAPACITY 1 << 30;代表hashmap默认容量 private static final int DEFAULT_CAPACITY 16;数组的最大长度 stat…

map的使用

map&#xff0c;我们一般称为字典或是映射&#xff0c;它提供了一对一的映射关系 使用场景 : map用于查找问题中某个元素出现的次数&#xff0c;比如问‘a’这个元素在数组中出现了多少次。这个只是最基本的应用场景&#xff0c;由于可以有任意的键值对的对应&#xff0c;map的…

ConcurrentHashMap-put

ConcurrentHashMap-put 推荐先读&#xff1a;ConcurrentHashMap属性解释 putVal主流程 initTable初始化table分支流程 helpTransfer帮助扩容分支流程 putVal主流程锁住桶后&#xff0c;链表插入/更新 putVal主流程锁住桶后&#xff0c;红黑树插入/更新 putVal主流程ad…

java变量使用,基础类型使用

先来了解java的基础比较常用的几种基础数据类型 int 整数类型 如 10 20 30 String 字符串类型 如 “你好” double 小数点类型 如 99.99 boolean 只有两个值 true 或 false true代表真 false代表假 定义变量的方法 为 类型 变量名 值 例如 int min 13; 这里我们定义了 一个…

排列问题

回溯法首先能处理一种排列问题&#xff0c;即全排列 题目 给定一个没有重复数字的序列&#xff0c;返回其所有可能的全排列。 示例: 输入: 3 1 2 3 输出: 1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1 有一个递归公式&#xff1a;perm(nums[0…n-1]) {取出一个数字} perm(nums[0……

缓存双写一致性

缓存双写一致性对于读&#xff1a;先读缓存&#xff0c;缓存没有&#xff0c;再读ku&#xff0c;回写缓存&#xff0c;这种没啥说的。对于写&#xff1a;先写库&#xff0c;再删除缓存&#xff0c;本文主要基于这种来探讨一下这样处理有什么问题&#xff1f; 如下图所示&#…

uni-app复选框checkbox大小调整

写vue的朋友就会被经典的误导 这个用样式去调显然解决不了问题 需要transform: scale() 个人建议 0.7大小比较合适 参考代码如下 <checkboxstyle"transform: scale(0.7)":checked"item.isChecked":value"item.isChecked"class"more&quo…