当前位置: 首页 > wzjs >正文

西安做网站商城的公司广州网站建设 知名

西安做网站商城的公司,广州网站建设 知名,wordpress4.0.x,北京彩页设计制作在 C C C 11 11 11 中, S T L STL STL 标准库引入了一个新的标准关联式容器: u n o r d e r e d _ m a p unordered\_map unordered_map(无序集合)。功能和 s e t set set 类似,都用于存储唯一元素。但是其底层数据结…

C C C++ 11 11 11 中, S T L STL STL 标准库引入了一个新的标准关联式容器 u n o r d e r e d _ m a p unordered\_map unordered_map无序集合)。功能和 s e t set set 类似,都用于存储唯一元素。但是其底层数据结构是哈希表,因此集合中的元素都是无序存储的,所以增删查的时间复杂度为 O ( 1 ) O(1) O(1),增删查的效率比 s e t set set 高。

文章目录

  • 一、unordered_map 的介绍
  • 二、unordered_map 的使用(常用接口)
    • 1. 常见构造
    • 2. iterator 的使用
    • 3. 增删查
    • 4. unordered_multimap
  • 三、unordered_map 的模拟实现
    • 1. STL 中的 hash_map 源码
    • 2. unordered_map 的迭代器
    • 3. unordered_map 支持 operator[]
    • 4. 模拟实现 unordered_map
  • 总结


一、unordered_map 的介绍

前面部分我们已经详细介绍了 m a p map map 容器,可以参考我的这篇博客:【STL】 m a p map map。由于 m a p map map u n o r d e r e d _ m a p unordered\_map unordered_map 这两个容器只是底层实现结构不同,其功能高度相似,基本上只要掌握 m a p map map 的用法, u n o r d e r e d _ m a p unordered\_map unordered_map 也就会用了。因此,和 m a p map map 相比只有一些性能和使用的差异,这里只介绍其差异部分。

在这里插入图片描述

u n o r d e r e d _ m a p unordered\_map unordered_map 的声明如下:

template < class Key,                                   // unordered_map::key_typeclass T,                                     // unordered_map::mapped_typeclass Hash = hash<Key>,                      // unordered_map::hasherclass Pred = equal_to<Key>,                  // unordered_map::key_equalclass Alloc = allocator< pair<const Key,T> >	// unordered_map::allocator_type> class unordered_map;
  1. K e y Key Key 就是 u n o r d e r e d _ m a p unordered\_map unordered_map 底层关键字的类型。

  2. T T T 就是 u n o r d e r e d _ m a p unordered\_map unordered_map 底层 v a l u e value value 的类型。

  3. u n o r d e r e d _ m a p unordered\_map unordered_map 默认要求 K e y Key Key 支持转换为整形,如果不支持或者有自己的需求可以自行实现支持将 K e y Key Key 转成整形的仿函数传给第三个模板参数。

  4. u n o r d e r e d _ m a p unordered\_map unordered_map 默认要求 K e y Key Key 支持比较相等,如果不支持或者有自己的需求可以自行实现支持将 K e y Key Key 比较相等的仿函数传给第四个模板参数。

  5. u n o r d e r e d _ m a p unordered\_map unordered_map 底层存储数据的内存是从空间配置器申请的,如果需要可以自己实现内存池,传给第五个模板参数。

注意:一般情况下,我们都不需要传后三个模板参数。

u n o r d e r e d _ m a p unordered\_map unordered_map 底层是用哈希桶实现,增删查平均效率是 O ( 1 ) O(1) O(1),迭代器遍历不再有序,为了跟 m a p map map 区分,所以取名 u n o r d e r e d _ m a p unordered\_map unordered_map无序集合)。


二、unordered_map 的使用(常用接口)

u n o r d e r e d _ m a p unordered\_map unordered_map 的底层结构是哈希表,因此不支持比较排序,所以细节上根据这一点和 m a p map map 有略微不同,其他都完全类似。这里只给出常用接口,更多详细信息可以自行查官方文档: u n o r d e r e d _ m a p unordered\_map unordered_map

1. 常见构造

构造 ( c o n s t r u c t o r ) (constructor) (constructor) 函数声明接口说明
u n o r d e r e d _ m a p ( ) unordered\_map() unordered_map()无参默认构造
u n o r d e r e d _ m a p ( c o n s t u n o r d e r e d _ m a p & u m p ) unordered\_map(const\ unordered\_map\&\ ump) unordered_map(const unordered_map& ump)拷贝构造
u n o r d e r e d _ m a p ( I n p u t I t e r a t o r f i r s t , I n p u t I t e r a t o r l a s t ) unordered\_map(InputIterator\ first, InputIterator\ last) unordered_map(InputIterator first,InputIterator last)使用迭代器区间构造
u n o r d e r e d _ m a p ( i n i t i a l i z e r _ l i s t < v a l u e _ t y p e > i l ) unordered\_map (initializer\_list<value\_type> il) unordered_map(initializer_list<value_type>il)使用 i n i t i a l i z e r initializer initializer 列表构造

2. iterator 的使用

i t e r a t o r iterator iterator 的使用接口说明
b e g i n ( ) begin() begin() + + + e n d ( ) end() end() i t e r a t o r iterator iterator
c b e g i n ( ) cbegin() cbegin() + + + c e n d ( ) cend() cend() c o n s t _ i t e r a t o r const\_iterator const_iterator

u n o r d e r e d _ m a p unordered\_map unordered_map 的迭代器是一个单向迭代器iterator -> a forward iterator to const value_type

在这里插入图片描述

3. 增删查

u n o r d e r e d _ m a p unordered\_map unordered_map 增删查接口说明
i n s e r t insert insert插入 v a l val val 数据
e r a s e erase erase删除 v a l val val 数据
f i n d find find查找 v a l val val,返回 v a l val val 位置的迭代器(没找到返回 e n d ( ) end() end()
c o u n t count count查找 v a l val val,返回 v a l val val 的个数

由于 u n o r d e r e d _ m a p unordered\_map unordered_map 不支持比较大小,且容器内元素是无序的,因此就没有 l o w e r _ b o u n d lower\_bound lower_bound u p p e r _ b o u n d upper\_bound upper_bound 接口了。

4. unordered_multimap

u n o r d e r e d _ m u l t i m a p unordered\_multimap unordered_multimap m u l t i m a p multimap multimap 的使用基本完全类似,都支持关键值( K e y Key Key)冗余

m u l t i m a p multimap multimap 完全类似, i n s e r t / f i n d / c o u n t / e r a s e insert/find/count/erase insert/find/count/erase 都围绕着支持值冗余有所差异:

  1. i n s e r t insert insert 可以插入相同的值

  2. 如果要查找的 x x x 有多个值, f i n d find find 会返回第一个迭代器

  3. c o u n t count count 会返回 x x x 的实际个数。

  4. e r a s e erase erase 指定值删除时,会删除所有的 x x x

并且 u n o r d e r e d _ m u l t i m a p unordered\_multimap unordered_multimap 也不支持 [ ] [\ ] [ ],因为支持 k e y key key 冗余, [ ] [\ ] [ ] 就只能支持插入了,不能支持修改。


三、unordered_map 的模拟实现

1. STL 中的 hash_map 源码

S G I − S T L 30 SGI-STL\ 30 SGISTL 30 版本是 C C C++ 11 11 11 之前的 S T L STL STL 版本,源代码中没有 u n o r d e r e d _ m a p unordered\_map unordered_map,因为这个容器是 C C C++ 11 11 11 之后才更新的。但是 S G I − S T L 30 SGI-STL\ 30 SGISTL 30 实现了哈希表,容器的名字是 h a s h _ m a p hash\_map hash_map,它是作为非标准容器(非 C C C++ 标准规定必须实现的容器)出现的。

  1. h a s h _ m a p hash\_map hash_map

  1. h a s h t a b l e . h hashtable.h hashtable.h

2. unordered_map 的迭代器


3. unordered_map 支持 operator[]

4. 模拟实现 unordered_map

  1. h a s h t a b l e . h hashtable.h hashtable.h

  1. u n o r d e r e d _ m a p . h unordered\_map.h unordered_map.h

  1. t e s t . c p p test.cpp test.cpp


总结


文章转载自:

http://AKUX7JNC.xqspn.cn
http://4ZR2xpyy.xqspn.cn
http://B8BbWBSH.xqspn.cn
http://KE5BI3KU.xqspn.cn
http://z1XKSs43.xqspn.cn
http://l1NAi9kH.xqspn.cn
http://ft360RZb.xqspn.cn
http://gpSsl7g0.xqspn.cn
http://mhzILDXT.xqspn.cn
http://NyUbFyoh.xqspn.cn
http://PLWiBTFc.xqspn.cn
http://OZXztUnx.xqspn.cn
http://8vQ3Pc63.xqspn.cn
http://RAWgZ8V4.xqspn.cn
http://lk1Ut1av.xqspn.cn
http://0t1WZ1P9.xqspn.cn
http://wnf88GdZ.xqspn.cn
http://Vn2oFtGt.xqspn.cn
http://7UFiBPEt.xqspn.cn
http://mTUJT2rC.xqspn.cn
http://lx7iYKAF.xqspn.cn
http://v8vLZ05F.xqspn.cn
http://h5N9Wihc.xqspn.cn
http://zmVNUrau.xqspn.cn
http://lNFBE6oM.xqspn.cn
http://7wa9lU0z.xqspn.cn
http://w8iQ8EL2.xqspn.cn
http://PWYVTeAR.xqspn.cn
http://7TXSMUk2.xqspn.cn
http://8BPQx9OR.xqspn.cn
http://www.dtcms.com/wzjs/771854.html

相关文章:

  • wordpress禁止收录连云港专业网站优化
  • 淮安谁家做网站设计专业知名企业网站
  • 重庆电脑网站建设上海市场监督管理局
  • 南京协会网站建设wordpress商品插件
  • deals网站建设收到网站打入0.1元怎么做分录
  • 网站设计软件网站建设分为几个阶段
  • 提供服务好的网站归档系统电脑版浏览器网页入口
  • tomcat做静态网站品牌网站建设特色大蝌蚪
  • dz网站建设视频教程wordpress图床
  • 松江品划做网站公司wordpress自定义鼠标
  • 网站建设飠金手指科杰十五域名交易中心
  • p2p网站开发的流程图wordpress 自定义内容类型
  • 珠海网站设计价格一起装修网装修公司
  • 重庆江北区网站建设网站开发p6
  • 网站制作要用哪些软件有哪些wordpress 头条号
  • 网站的js效果代码大全微网站建设包含
  • 海淀西北旺网站建设wordpress 微博图床
  • 腾讯云服务器centos做静态网站论坛程序
  • 精美化妆品网站模板百度怎么搜索关键词
  • 网站域名备案服务号个人网站下载
  • 财经大学网站建设wordpress建站百科
  • 兼职网站编程杭州网站建设官方蓝韵网络
  • 论坛网站建设费用网站如何添加二维码
  • 郑州做营销型网站建设网站恶意点击
  • 济南网站建设方案报价北京网站建设报价表
  • 李青青做网站 公司主要做应用领域三个字的公司名称精选
  • 百度的网站关键词被篡改网站建设ppt方案模板
  • 建设电影网站算盗版吗设计本笔记本推荐
  • 做网站违法网站搭建 成都
  • 做网站没什么用啊老师别人强重庆市建设工程信息网行业协会