【C++】unordered_map和unordered_set的使用
·
unordered_set和unordered_multiset参考文档
https://legacy.cplusplus.com/reference/unordered_set/
unordered_set类的介绍
- Key就是unordered_set底层关键字的类型
- unordered_set默认要求Key支持转换为整形,如果不支持或者想按自己的需求走可以自行实现支持将Key转成整形的仿函数传给第二个模板参数
- unordered_set默认要求Key支持比较相等,如果不支持或者想按自己的需求走可以自行实现支持将Key比较相等的仿函数传给第三个模板参数
- unordered_set底层存储数据的内存是从空间配置器申请的,如果需要可以自己实现内存池,传给第四个参数
- unordered_set底层是用哈希桶实现,增删查平均效率是O(1) ,迭代器遍历不再有序
unordered_set和set的使用差异
- unordered_set的支持增删查且跟set的使用⼀模⼀样
- unordered_set和set的第⼀个差异是对key的要求不同,set要求Key支持小于比较,而unordered_set要求Key支持转成整形且支持等于比较
- unordered_set和set的第二个差异是迭代器的差异,set的iterator是双向迭代器,unordered_set是单向迭代器,其次set底层是红黑树,红黑树是二叉搜索树,走中序遍历是有序的,所以set迭代器遍历是有序+去重,而unordered_set底层是哈希表,迭代器遍历是无序+去重
- unordered_set和set的第三个差异是性能的差异,整体而言大多数场景下,unordered_set的增删查改更快⼀些,因为红黑树增删查改效率是O(logN) ,而哈希表增删查平均效率是O(1)
unordered_map和unordered_multimap参考文档
https://legacy.cplusplus.com/reference/unordered_map/unordered_map/?kw=unordered_map
unordered_map和map的使用差异
- unordered_map的支持增删查且跟map的使用⼀模⼀样
- unordered_map和map的第⼀个差异是对key的要求不同,map要求Key支持小于比较,而unordered_map要求Key支持转成整形且支持等于比较
- unordered_map和map的第二个差异是迭代器的差异,map的iterator是双向迭代器,unordered_map是单向迭代器,其次set底层是红黑树,红黑树是二叉搜索树,走中序遍历是有序的,所以map迭代器遍历是有序+去重,而unordered_map底层是哈希表,迭代器遍历是无序+去重
- unordered_map和map的第三个差异是性能的差异,整体而言大多数场景下,unordered_map的增删查改更快⼀些,因为红黑树增删查改效率是O(logN) ,而哈希表增删查平均效率是O(1)
unordered_multimap/unordered_multiset
- unordered_multimap/unordered_multiset跟multimap/multiset功能完全类似,支持Key冗余
- nordered_multimap/unordered_multiset跟multimap/multiset的差异也是三个方面的差异,key的要求的差异,iterator及遍历顺序的差异,性能的差异。
unordered_xxx的哈希相关接口
Buckets和Hash policy系列的接口从使用的角度先不要关注,学习了哈希表底层,再探这个系类的接口
更多推荐
所有评论(0)