百度如何才能搜到你的网站,国外平面设计素材网站,wordpress 文章标签,升华网络推广软件文章目录 前言一、set概念介绍二、set的使用1. 插入删除相关2. 查找相关1#xff09;find2#xff09;count3#xff09;lower_bound与upper_bound4#xff09;equal_range 三、set的值是不能修改的原理四、基于哈希表的set总结 前言
根据应用场景的不同#xff0c;STL总… 文章目录 前言一、set概念介绍二、set的使用1. 插入删除相关2. 查找相关1find2count3lower_bound与upper_bound4equal_range 三、set的值是不能修改的原理四、基于哈希表的set总结 前言
根据应用场景的不同STL总共实现了两种不同结构的管理式容器树型结构与哈希结构。树型结构的关联式容器主要有四种map、set、multimap、multiset。这四种容器的共同点是使用平衡搜索树(即红黑树)作为其底层结果容器中的元素是一个有序的序列。下面一依次介绍每一个容器。
首先是set相关gogogo 一、set概念介绍 set就是key_tree的模型
set是按照一定次序存储元素的容器在set中元素的value也标识它(value就是key类型为T)并且每个value必须是唯一的。 set中的元素不能在容器中修改(元素总是const)但是可以从容器中插入或删除它们。在内部set中的元素总是按照其内部比较对象(类型比较)所指示的特定严格弱排序准则进行 排序。set容器通过key访问单个元素的速度通常比unordered_set容器慢但它们允许根据顺序对 子集进行直接迭代。set在底层是用二叉搜索树(红黑树)实现的 注意 与map/multimap不同map/multimap中存储的是真正的键值对key, valueset中只放 value但在底层实际存放的是由value, value构成的键值对。set中插入元素时只需要插入value即可不需要构造键值对。set中的元素不可以重复(因此可以使用set进行去重)。使用set的迭代器遍历set中的元素可以得到有序序列set中的元素默认按照小于来比较set中查找某个元素时间复杂度为 l o g 2 n log_2 n log2nset中的元素不允许修改它的普通迭代器和const迭代器都是const迭代器set中的底层使用二叉搜索树(红黑树) 二、set的使用
1. 插入删除相关 首先set的插入默认是排序 去重
set的删除有就删没有就不做为 2. 查找相关 1find
首先是find: 如果找到了就会返回对应结点的迭代器没找到就会返回end() 2count
然后是countcount的作用是返回当前值出现的次数 对于set来说count并没有太大的作用可以说和find的作用是一样的。 但是对于multiset来说就有意义了因为set是默认去重的因此插入相同的元素只有一个但是multiset默认是不去重的因此count可以统计个数。 3lower_bound与upper_bound
lower_bound与upper_bound用来查找一段区间[low, up)
是一段左闭右开的区间因为只有这样我们用迭代器访问的时候 itlow ! itup才能不漏最后一个元素。
因此对于lower_bound找的是x的迭代器
对于upper_bound找的是x的迭代器。
如果没找到就是end()。
对于等于的情况
对于的所找的值 在set中找不到
4equal_range
equal_range作用是找到相同的值的一段迭代区间同样是左闭右开的区间。 它的返回值是一个pairpair是两个值做组成的一对其中first是左区间second是右区间。 因此我们接收返回值需要用pairset::const_iterator, const set::const_iteratorpair中每一个都是set类型的const_iterator也可以用auto接收。
这里对于set来说因为set会去重所以其实equal_range对于set来说没什么意义。
但是对于multiset来说就有意义了nultiset不去重equal_range就可以返回相同的值的区间那么我们就可以对这个区间执行删除或者其他操作了。 三、set的值是不能修改的原理
set只是key的模型set是不能修改的它的原理是set的迭代器和const迭代器都是const迭代器。 四、基于哈希表的set
除了上述两个版本还有两个基于哈希表的版本的set.
这张图展示了 C 中的四种无序关联容器Unordered Associative Containers。这些容器底层是基于哈希表实现的所以元素是无序存储的。以下是每种容器的简要介绍 unordered_set 用于存储唯一的元素集合每个元素只能出现一次。适合用于快速查找一个元素是否存在的场景。 unordered_multiset 与 unordered_set 类似但允许存储重复的元素。适合用于需要存储非唯一元素的集合。 unordered_map 存储键值对key-value pairs每个键key是唯一的。可用于快速查找一个键对应的值。 unordered_multimap 与 unordered_map 类似但允许存储重复的键。适合用于需要一个键对应多个值的场景。
由于这些容器基于哈希表因此它们的查找、插入和删除操作通常具有常数时间复杂度O(1)。 但是他们是无序的。 总结
到这里set的内容就结束啦创作不易求各位大大多多支持~~~