前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >STL源码剖析-hash_set / hash_multiset

STL源码剖析-hash_set / hash_multiset

作者头像
bear_fish
发布于 2018-09-14 01:42:30
发布于 2018-09-14 01:42:30
41300
代码可运行
举报
运行总次数:0
代码可运行

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://cloud.tencent.com/developer/article/1338320

类似于标准的set以rb_tree为底层实现,hash_set以hashtable为底层实现,hash_set的底层操作也是由hashtable提供。

运用set,为的是能够快速的搜索元素。这一点无论其底层是rb_tree或是hashtable,都可以达成任务。但是rb_tree有自动排序的功能,而hashtable是没有,反应的结果是set元素有自动排序功能,而hash_set没有。

如下主要给出hash_set的成员变量,以及构造函数,插入函数,通过这几个部门我们就可以在大体上理解hash_set.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
template<typename Value, class HashFun = std::hash<Value>>
class hash_set{
    private:
        typedef hashtable<Value, Value, HashFun> ht;

        // 成员,底层以hash table完成
        ht rep;

    public:
        // 构造函数,缺省使用大小为100的表格
        // 会被hashtable调整为193
        hash_set():rep(100){};

        template<typename InputIterator>
        hash_set(InputIterator first, InputIterator last):
                rep(100){rep.insert_unique(first, last);}

};

hash_multiset的特性和hash_set完全相同,唯一的区别在于插入的时候使用的insert_equal函数(允许插入重复值)而不是insert_unique(不允许插入重复值)。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018年07月01日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
STL源码剖析-hash_map / hash_multimap
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/haluoluo211/article/details/80877395
bear_fish
2018/09/14
6740
STL源码剖析-map/multimap容器
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/haluoluo211/article/details/80877204
bear_fish
2018/09/14
6740
STL源码剖析-set容器
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/haluoluo211/article/details/80877141
bear_fish
2018/09/14
5460
C++(STL):33---hash_set、hash_map、hash_multiset、hash_multimap源码剖析
这些关联容器底层都是使用hash table实现的. 一、hash_set 由于hash_set底层是以hash table实现的,因此hash_set只是简单的调用hash table的方法即可 与set的异同点: hash_set与set都是用来快速查找元素的 但是set会对元素自动排序,而hash_set没有 hash_set和set的使用方法相同 在介绍hash table的hash functions的时候说过,hash table有一些无法处理的类型(除非用户自己书写hash function
用户3479834
2021/02/03
2K0
C++(STL):33---hash_set、hash_map、hash_multiset、hash_multimap源码剖析
STL之set与multiset那些事
set/multiset以rb_tree为底层结构,因此有元素自动排序特性。排序的依据是key,而set/multiset元素的value和key合二为一:value就是key。
公众号guangcity
2019/10/23
4270
STL关联容器-红黑树
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/haluoluo211/article/details/80877064
bear_fish
2018/09/14
5400
STL关联容器-红黑树
STL源码剖析-hashtable
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/haluoluo211/article/details/80877353
bear_fish
2018/09/14
8950
STL源码剖析-hashtable
C++(STL):36---关联式容器multiset、multimap源码剖析
一、multiset multiset的特性以及用法和set完全相同,唯一的差别在于它允许键值重复,因此它的插入操作采用的是底层RB-tree的insert_equal()而非insert_unique() multiset源码 //以下代码摘录于stl_multiset.h template <class _Key, class _Compare, class _Alloc> class multiset { // requirements: __STL_CLASS_REQUIRES(_Key,
用户3479834
2021/02/03
6290
从零开始学C++之STL(一):STL六大组件简介
s1mba
2017/12/28
3.5K0
从零开始学C++之STL(一):STL六大组件简介
读完两遍《STL源码剖析》后,我发现了一些辛秘
对于每一位学习 C++ 的小伙伴来说,STL 不可谓不重要,特别是那些为我们造好的底层轮子比如容器、算法等更是一件利器,比如在一些 OJ 平台,用 STL 下的算法刷题简直不要太爽,谁用谁知道。
拓跋阿秀
2021/04/26
3.4K0
读完两遍《STL源码剖析》后,我发现了一些辛秘
C++(STL):27 ---关联式容器set源码剖析
一、set set语法使用参阅: set的特性 set所有元素都会根据元素的键值自动被排序 set中的键值就是实值,实值就是键值 默认情况下set不允许两个元素重复 set的迭代器 不能根据set的迭代器改变set元素的值。因为其键值就是实值,实值就是键值,如果改变set元素值,会严重破坏set组织 在后面的源码中会看到,set的迭代器set<T>::iterator被定义为底层RB-tree的const_iterator。因此set的迭代器是一种constant iterators set拥有与lis
用户3479834
2021/02/03
7360
【STL】关联容器 — hash_set
容器hash_set是以hash table为底层机制的,差点儿所有的操作都是转调用hash table提供的接口。因为插入无法存储同样的键值,所以hash_set的插入操作所有都使用hash table的insert_unique接口,代码例如以下:
全栈程序员站长
2022/07/13
1830
【STL】关联容器 — hash_set
C++(STL):31 ---关联式容器map源码剖析
map的特性 所有元素都会根据元素的键值自动被排序 map中的pair结构 map的所有元素类型都是pair,同时拥有实值(value)和键值(key) pair的第一个元素视为键值,第二个元素视为实值 map不允许两个元素拥有相同的键值 下面是stl_pair.h中pair的定义: //代码摘录与stl_pair.h template <class _T1, class _T2> struct pair { typedef _T1 first_type; typedef _T2 second_type;
用户3479834
2021/02/03
1.6K0
C++(STL):31 ---关联式容器map源码剖析
​C++ STL源码剖析之unordered_xxx
前面学到了hashtable,而这节是hashtable的容器适配器:unordered_map。
公众号guangcity
2019/10/31
1.9K0
C++ STL源码剖析之map、multimap、initializer_list
map/multimap 以rb_tree为底层结构,因此有元素自动排序特点,排序的依据是key。
公众号guangcity
2019/10/23
1.2K0
C++ STL源码剖析之map、multimap、initializer_list
再探 set/map
set和map底层数据结构都是红黑树,红黑树的data域段为==pair<key, value>==类型。
看、未来
2021/10/09
7040
再探 set/map
STL map, hash_map , unordered_map区别、对比
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/haluoluo211/article/details/80877558
bear_fish
2018/09/14
4.9K0
STL map, hash_map , unordered_map区别、对比
十道海量数据处理面试题与十个方法大总结
海量就是数据量太大,所以导致要么是无法在较短时间内迅速解决,要么是无法一次性装入内存。
全栈程序员站长
2022/09/09
1.5K0
十道海量数据处理面试题与十个方法大总结
教你如何迅速秒杀掉:99%的海量数据处理面试题
   一般而言,标题含有“秒杀”,“99%”,“史上最全/最强”等词汇的往往都脱不了哗众取宠之嫌,但进一步来讲,如果读者读罢此文,却无任何收获,那么,我也甘愿背负这样的罪名,:-),同时,此文可以看做是对这篇文章:十道海量数据处理面试题与十个方法大总结的一般抽象性总结。
bear_fish
2018/09/20
1.4K0
教你如何迅速秒杀掉:99%的海量数据处理面试题
走进STL - 红黑树,是圣诞树吗
红黑树,又称RB-tree,是一种平衡二叉搜索树。不过它这个平衡没有AVL-tree要求那么严格罢了。(最长路径不超过最短路径的两倍)
看、未来
2020/08/26
4130
走进STL - 红黑树,是圣诞树吗
相关推荐
STL源码剖析-hash_map / hash_multimap
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文