首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >C++容器的分类

C++容器的分类

原创
作者头像
ocean@32
修改于 2022-11-13 03:12:27
修改于 2022-11-13 03:12:27
3930
举报

一.sequence containers

1.array:数组封装类

2.vector: 单向生长

3.deque: 双向生长

4.list: 双向链表,通过指针链接相邻的两个元素

5.forward-list:单向链表,比list更省内存

二.associative containers

set/multiset: value是key,mutil表示value的值可以重复

map/multimap: value和key值分开,通过key值得到value的值

unordered_set/unordered_map/unordered_multiset/unordered_multimap: 采用separate chaining原理,背后是hashtable,hashtable下面挂了很多像篮子一样的指针,这些指针存放在vector的容器内,篮子内的元素可以是单向列表也可以是双向列表,元素的总数不超过篮子的总数,当等于篮子数量的时候,篮子的数量会成长为之前数量的两倍,这个过程叫做rehashing,篮子内的元素会通过hash function计算出来的hash code重新选择放入哪个篮子中。

三.容器的定义

template<typename _Tp, typename _alloc = std::allocator<_Tp>>

class vector : protected _Vector_base<_Tp, _alloc>

template<typename _Tp, typename _alloc = std::allocator<_Tp>>

class list : protected _List_base<_Tp, _alloc>

template<Typename _Key, typename _Compare = std::less<_Key>, typename _alloc= std::allocator<_Key>>

class set

template<typename _Key, typename _Tp, typename _Compare = std::less<_Key>, typename _alloc = std::allocator<std::pair<const _Key, _Tp>>>

class map

template<class _Value, calss _Hash = hash<_Value>, class _Pred=std::equal_to<_Value>, calss _alloc = std::allocator<_Value>>

class unordered_set

template<class _Key, class _Tp, class _Hash = hash<_Key>, class _Pred =std::equal_to<_Key>, class _alloc = std::allocator<std::pair<const _Key, _Tp>>>

class unordered_map

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
​C++ STL源码剖析之unordered_xxx
前面学到了hashtable,而这节是hashtable的容器适配器:unordered_map。
公众号guangcity
2019/10/31
1.9K0
【视频+文字讲解】C++那些事之彻底搞懂STL HashTable
最近的繁星计划有一个task是阅读hashtable源码,看到一些朋友的提问,这里将总结一些面试常考点,以及看完hashtable你必须要掌握的几点内容。
公众号guangcity
2023/09/02
3150
【视频+文字讲解】C++那些事之彻底搞懂STL HashTable
C++:哈希表
在 C++ 中,unordered_set 和 unordered_map 是两种基于哈希表(Hash Table)的容器,它们是 C++11 标准模板库的一部分,提供了高效的元素存储和访问。
HZzzzzLu
2024/11/26
1770
C++:哈希表
【C++】unordered_map与unordered_set使用
https://legacy.cplusplus.com/reference/unordered_set/
用户11290673
2025/01/13
1360
C++11:基于std::unordered_map和共享锁构建线程安全的map
版权声明:本文为博主原创文章,转载请注明源地址。 https://blog.csdn.net/10km/article/details/52072061
10km
2019/05/25
9.2K0
用哈希表封装myunordered_map/_set--C++
SGI-STL30版本源代码中没有unordered_map和unordered_set,SGI-STL30版本是C++11之前的STL版本,这两个容器是C++11之后才更新的。但是SGI-STL30实现了哈希表,只容器的名字是hash_map和hash_set,他是作为非标准的容器出现的,非标准是指非C++标准规定必须实现的,源代码在hash_map/hash_set/stl_hash_map/stl_hash_set/stl_hashtable.h中 hash_map和hash_set的实现结构框架核心部分截取出来如下:
小志biubiu
2025/02/27
730
用哈希表封装myunordered_map/_set--C++
现代C++教程:高速上手(四)-容器
std::array与std::vector不同的是,array对象的大小是固定的,如果容器大小是固定的,那么可以优先考虑使用std::array容器。
程序员小涛
2020/12/03
9250
【笔记】C++标准库: 体系结构与内核分析(上)
这篇是这段时间看的侯捷关于C++标准模板库的课程《C++标准库: 体系结构与内核分析》的笔记, 课程内容大家自己找吧. 这个课程质量很高, 除了介绍STL的基础操作外, 更进一步介绍了STL的工作原理并展示了部分源代码. 尽管这门课所介绍的都是较老版本的STL内容, 但是毕竟底层思想多年来也没有太大改变, 对今天仍有很大意义.
ZifengHuang
2021/12/18
1.3K0
【笔记】C++标准库: 体系结构与内核分析(上)
【C++】用哈希表封装myunordered_map和myunordered_set
SGI-STL30版本源代码中没有unordered_map和unordered_set,SGI-STL30版本是C++11之前的STL版本,这两个容器是C++11之后才更新的。但是SGI-STL30实现了哈希表,只容器的名字是hash_map和hash_set,他是作为⾮标准的容器出现的,⾮标准是指⾮C++标准规定必须实现的,源代码在hash_map/hash_set/stl_hash_map/stl_hash_set/stl_hashtable.h中hash_map和hash_set的实现结构框架核⼼部分截取出来如下:
用户11290673
2025/01/13
1280
【C++】用哈希表封装myunordered_map和myunordered_set
【哈希表封装实现】—— 我与C++的不解之缘(二十九)
源代码在hash_map/hash_set/stl_hash_map/stl_hash_map/stl_hash_set/stl_hashtable.h中
星辰与你
2025/04/03
990
【哈希表封装实现】—— 我与C++的不解之缘(二十九)
C++ STL源码剖析之map、multimap、initializer_list
map/multimap 以rb_tree为底层结构,因此有元素自动排序特点,排序的依据是key。
公众号guangcity
2019/10/23
1.2K0
C++ STL源码剖析之map、multimap、initializer_list
《逆袭进大厂》第四弹之C++重头戏STL30问30答
这是《逆袭进大厂》系列的第四期,本期是 C++ 重头戏,也就是标准模板库 STL 的内容,本期是 24098 个字。
拓跋阿秀
2021/03/21
1.6K0
从零开始学C++之STL(一):STL六大组件简介
s1mba
2017/12/28
4.1K0
从零开始学C++之STL(一):STL六大组件简介
C++ STL-map与set的使用
序列式容器存储的元素在逻辑上呈现为线性序列。这些容器的共同特点是,它们允许通过位置(索引)来访问元素,且元素之间的相对位置是固定的,除非进行插入或删除操作。常见的序列式容器包括:
2025/01/27
1120
map 学习(下)——C++ 中的 hash_map, unordered_map
map 学习(下)——C++ 中的 hash_map, unordered_map 接上篇《map 学习(一)——C++中 map 的使用》。 一、hash_map 参考《C++ STL中哈希表 ha
剑影啸清寒
2018/01/02
13.7K1
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
6550
读完两遍《STL源码剖析》后,我发现了一些辛秘
对于每一位学习 C++ 的小伙伴来说,STL 不可谓不重要,特别是那些为我们造好的底层轮子比如容器、算法等更是一件利器,比如在一些 OJ 平台,用 STL 下的算法刷题简直不要太爽,谁用谁知道。
拓跋阿秀
2021/04/26
3.5K0
读完两遍《STL源码剖析》后,我发现了一些辛秘
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
2.2K0
C++(STL):33---hash_set、hash_map、hash_multiset、hash_multimap源码剖析
STL总结与常见面试题+资料
为了建立数据结构和算法的一套标准,并且降低他们之间的耦合关系,以提升各自的独立性、弹性、交互操作性(相互合作性,interoperability),诞生了STL。
C语言与CPP编程
2020/12/02
6060
STL总结与常见面试题+资料
C++ 中文周刊 第126期
RSS https://github.com/wanghenshui/cppweeklynews/releases.atom
王很水
2024/07/30
1200
C++ 中文周刊 第126期
推荐阅读
相关推荐
​C++ STL源码剖析之unordered_xxx
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档