婚礼网站怎么做,国内做免费视频网站,网站备案号大全,wordpress代码加亮的深入探索C11标准库STL#xff1a;新特性和优化技巧 一、前言二、容器简介三、迭代器简介四、map与unordered_map#xff08;红黑树VS哈希表#xff09;4.1、map和unordered_map的差别4.2、优缺点以及适用处4.3、小结 五、总结 一、前言
STL定义了强大的、基于模板的、可复用… 深入探索C11标准库STL新特性和优化技巧 一、前言二、容器简介三、迭代器简介四、map与unordered_map红黑树VS哈希表4.1、map和unordered_map的差别4.2、优缺点以及适用处4.3、小结 五、总结 一、前言
STL定义了强大的、基于模板的、可复用的组件实现了许多通用的数据结构及处理这些数据结构的算法。其中包含三个关键组件——容器container流行的模板数据结构、迭代器iterator和算法algorithm。
组件描述容器容器是用来管理某一类对象的集合。C 提供了各种不同类型的容器比如 deque、list、vector、map 等。迭代器用于遍历对象集合的元素。这些集合可能是容器也可能是容器的子集。算法算法作用于容器。它们提供了执行各种操作的方式包括对容器内容执行初始化、排序、搜索和转换等操作。
二、容器简介
STL容器可将其分为四类序列容器、有序关联容器、无序关联容器、容器适配器。
序列容器
标准库容器类描述array固定大小直接访问任意元素deque从前部或后部进行快速插入和删除操作直接访问任何元素forward_list单链表在任意位置快速插入和删除list双向链表在任意位置进行快速插入和删除操作vector从后部进行快速插入和删除操作直接访问任意元素 #mermaid-svg-OnyU53hazaoRNWGH {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-OnyU53hazaoRNWGH .error-icon{fill:#552222;}#mermaid-svg-OnyU53hazaoRNWGH .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-OnyU53hazaoRNWGH .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-OnyU53hazaoRNWGH .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-OnyU53hazaoRNWGH .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-OnyU53hazaoRNWGH .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-OnyU53hazaoRNWGH .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-OnyU53hazaoRNWGH .marker{fill:#333333;stroke:#333333;}#mermaid-svg-OnyU53hazaoRNWGH .marker.cross{stroke:#333333;}#mermaid-svg-OnyU53hazaoRNWGH svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-OnyU53hazaoRNWGH .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-OnyU53hazaoRNWGH .cluster-label text{fill:#333;}#mermaid-svg-OnyU53hazaoRNWGH .cluster-label span{color:#333;}#mermaid-svg-OnyU53hazaoRNWGH .label text,#mermaid-svg-OnyU53hazaoRNWGH span{fill:#333;color:#333;}#mermaid-svg-OnyU53hazaoRNWGH .node rect,#mermaid-svg-OnyU53hazaoRNWGH .node circle,#mermaid-svg-OnyU53hazaoRNWGH .node ellipse,#mermaid-svg-OnyU53hazaoRNWGH .node polygon,#mermaid-svg-OnyU53hazaoRNWGH .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-OnyU53hazaoRNWGH .node .label{text-align:center;}#mermaid-svg-OnyU53hazaoRNWGH .node.clickable{cursor:pointer;}#mermaid-svg-OnyU53hazaoRNWGH .arrowheadPath{fill:#333333;}#mermaid-svg-OnyU53hazaoRNWGH .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-OnyU53hazaoRNWGH .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-OnyU53hazaoRNWGH .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-OnyU53hazaoRNWGH .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-OnyU53hazaoRNWGH .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-OnyU53hazaoRNWGH .cluster text{fill:#333;}#mermaid-svg-OnyU53hazaoRNWGH .cluster span{color:#333;}#mermaid-svg-OnyU53hazaoRNWGH div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-OnyU53hazaoRNWGH :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Sequence Containers vector list deque array forward_list 有序关联容器键按顺序保存
标准库容器类描述set快速查找无重复元素multiset快速查找可有重复元素map一对一映射无重复元素基于键快速查找multimap一对一映射可有重复元素基于键快速查找 #mermaid-svg-phbWpTGMHrj6vhIu {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-phbWpTGMHrj6vhIu .error-icon{fill:#552222;}#mermaid-svg-phbWpTGMHrj6vhIu .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-phbWpTGMHrj6vhIu .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-phbWpTGMHrj6vhIu .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-phbWpTGMHrj6vhIu .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-phbWpTGMHrj6vhIu .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-phbWpTGMHrj6vhIu .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-phbWpTGMHrj6vhIu .marker{fill:#333333;stroke:#333333;}#mermaid-svg-phbWpTGMHrj6vhIu .marker.cross{stroke:#333333;}#mermaid-svg-phbWpTGMHrj6vhIu svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-phbWpTGMHrj6vhIu .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-phbWpTGMHrj6vhIu .cluster-label text{fill:#333;}#mermaid-svg-phbWpTGMHrj6vhIu .cluster-label span{color:#333;}#mermaid-svg-phbWpTGMHrj6vhIu .label text,#mermaid-svg-phbWpTGMHrj6vhIu span{fill:#333;color:#333;}#mermaid-svg-phbWpTGMHrj6vhIu .node rect,#mermaid-svg-phbWpTGMHrj6vhIu .node circle,#mermaid-svg-phbWpTGMHrj6vhIu .node ellipse,#mermaid-svg-phbWpTGMHrj6vhIu .node polygon,#mermaid-svg-phbWpTGMHrj6vhIu .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-phbWpTGMHrj6vhIu .node .label{text-align:center;}#mermaid-svg-phbWpTGMHrj6vhIu .node.clickable{cursor:pointer;}#mermaid-svg-phbWpTGMHrj6vhIu .arrowheadPath{fill:#333333;}#mermaid-svg-phbWpTGMHrj6vhIu .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-phbWpTGMHrj6vhIu .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-phbWpTGMHrj6vhIu .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-phbWpTGMHrj6vhIu .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-phbWpTGMHrj6vhIu .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-phbWpTGMHrj6vhIu .cluster text{fill:#333;}#mermaid-svg-phbWpTGMHrj6vhIu .cluster span{color:#333;}#mermaid-svg-phbWpTGMHrj6vhIu div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-phbWpTGMHrj6vhIu :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Associative Containers Set Map Multiset Multimap 无序关联容器
标准库容器类描述unordered_set快速查找无重复元素unordered_multiset快速查找可有重复元素unordered_map一对一映射无重复元素基于键快速查找unordered_multimap一对一映射可有重复元素基于键快速查找 #mermaid-svg-YlUj16uCnnkTDLUu {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-YlUj16uCnnkTDLUu .error-icon{fill:#552222;}#mermaid-svg-YlUj16uCnnkTDLUu .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-YlUj16uCnnkTDLUu .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-YlUj16uCnnkTDLUu .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-YlUj16uCnnkTDLUu .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-YlUj16uCnnkTDLUu .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-YlUj16uCnnkTDLUu .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-YlUj16uCnnkTDLUu .marker{fill:#333333;stroke:#333333;}#mermaid-svg-YlUj16uCnnkTDLUu .marker.cross{stroke:#333333;}#mermaid-svg-YlUj16uCnnkTDLUu svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-YlUj16uCnnkTDLUu .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-YlUj16uCnnkTDLUu .cluster-label text{fill:#333;}#mermaid-svg-YlUj16uCnnkTDLUu .cluster-label span{color:#333;}#mermaid-svg-YlUj16uCnnkTDLUu .label text,#mermaid-svg-YlUj16uCnnkTDLUu span{fill:#333;color:#333;}#mermaid-svg-YlUj16uCnnkTDLUu .node rect,#mermaid-svg-YlUj16uCnnkTDLUu .node circle,#mermaid-svg-YlUj16uCnnkTDLUu .node ellipse,#mermaid-svg-YlUj16uCnnkTDLUu .node polygon,#mermaid-svg-YlUj16uCnnkTDLUu .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-YlUj16uCnnkTDLUu .node .label{text-align:center;}#mermaid-svg-YlUj16uCnnkTDLUu .node.clickable{cursor:pointer;}#mermaid-svg-YlUj16uCnnkTDLUu .arrowheadPath{fill:#333333;}#mermaid-svg-YlUj16uCnnkTDLUu .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-YlUj16uCnnkTDLUu .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-YlUj16uCnnkTDLUu .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-YlUj16uCnnkTDLUu .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-YlUj16uCnnkTDLUu .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-YlUj16uCnnkTDLUu .cluster text{fill:#333;}#mermaid-svg-YlUj16uCnnkTDLUu .cluster span{color:#333;}#mermaid-svg-YlUj16uCnnkTDLUu div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-YlUj16uCnnkTDLUu :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Unordered Containers Unordered_set Unordered_map Unordered_multiset Unordered_multimap 容器适配器
标准库容器类描述stack后进先出LIFOqueue先进先出FIFOpriority_queue优先级最高的元素先出
序列容器描述了线性的数据结构也就是说其中的元素在概念上” 排成一行), 例如数组、向量和 链表。
关联容器描述非线性的容器它们通常可以快速锁定其中的元素。这种容器可以存储值的集合或 者键值对。
栈和队列都是在序列容器的基础上加以约束条件得到的因此STL把stack和queue作为容器适配器来实现这样就可以使程序以一种约束方式来处理线性容器。类型string支持的功能跟线性容器一样 但是它只能存储字符数据。
三、迭代器简介
迭代器在很多方面与指针类似也是用于指向首类容器中的元素还有一些其他用途后面将会提 到。 迭代器存有它们所指的特定容器的状态信息即迭代器对每种类型的容器都有一个实现。 有些迭代器的操作在不同容器间是统一的。 例如运算符间接引用一个迭代器这样就可以使用它所指向的元素。运算符使得迭代器指向容器中的下一个元素和数组中指针递增后指向数组的下一个元素类似。
STL 首类容器提供了成员函数begin和 end。函数 begin 返回一个指向容器中第一个元素的迭代器函数 end 返回一个指向容器中最后一个元素的下一个元素这个元素并不存在常用于判断是否到达了容器的结束位位置的迭代器。 如果迭代器 it 指向一个特定的元素那么 it 指向这个元素的下一个元素。*it 指代的是it指向的元素。 从函数 end 中返回的迭代器只在相等或不等的比较中使用来判断这个“移动的迭代器” 在这里指it)是否到达了容器的末端。
使用一个 iterator 对象来指向一个可以修改的容器元素使用一个 const_iterator 对象来指向一个不能修改 的容器元素。
类型描述随机访问迭代器(random access)在双向迭代器基础上增加了直接访问容器中任意元素的功能 即可以向前或向后跳转任意个元素双向迭代器(bidirectional)在前向迭代器基础上增加了向后移动的功能。支持多遍扫描算法前向迭代器(forword)综合输入和输出迭代器的功能并能保持它们在容器中的位置作为状态信息可以使用同一个迭代器两次遍历一个容器称为多遍扫描算法输出迭代器(output)用于将元素写入容器。 输出迭代楛每次只能向前移动一个元索。 输出迭代器只支持一遍扫描算法不能使用相同的输出迭代器两次遍历一个序列容器输入迭代器(input)用于从容器读取元素。 输入迭代器每次只能向前移动一个元素。 输入迭代器只支持一遍扫描算法不能使用相同的输入迭代器两次遍历一个序列容器
每种容器所支持的迭代器类型决定了这种容器是否可以在指定的 STL 算 法中使用。 支持随机访问迭代器的容器可用于所有的 STL 算法除了那些需要改变容器大小的算法这样的算法不能在数组和 array对象中使用。 指向 数组的指针可以代替迭代器用于几乎所有的 STL 算法中包括那些要求随机访问迭代器的算法。 #mermaid-svg-clEqNcczFXNjBmxa {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-clEqNcczFXNjBmxa .error-icon{fill:#552222;}#mermaid-svg-clEqNcczFXNjBmxa .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-clEqNcczFXNjBmxa .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-clEqNcczFXNjBmxa .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-clEqNcczFXNjBmxa .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-clEqNcczFXNjBmxa .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-clEqNcczFXNjBmxa .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-clEqNcczFXNjBmxa .marker{fill:#333333;stroke:#333333;}#mermaid-svg-clEqNcczFXNjBmxa .marker.cross{stroke:#333333;}#mermaid-svg-clEqNcczFXNjBmxa svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-clEqNcczFXNjBmxa .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-clEqNcczFXNjBmxa .cluster-label text{fill:#333;}#mermaid-svg-clEqNcczFXNjBmxa .cluster-label span{color:#333;}#mermaid-svg-clEqNcczFXNjBmxa .label text,#mermaid-svg-clEqNcczFXNjBmxa span{fill:#333;color:#333;}#mermaid-svg-clEqNcczFXNjBmxa .node rect,#mermaid-svg-clEqNcczFXNjBmxa .node circle,#mermaid-svg-clEqNcczFXNjBmxa .node ellipse,#mermaid-svg-clEqNcczFXNjBmxa .node polygon,#mermaid-svg-clEqNcczFXNjBmxa .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-clEqNcczFXNjBmxa .node .label{text-align:center;}#mermaid-svg-clEqNcczFXNjBmxa .node.clickable{cursor:pointer;}#mermaid-svg-clEqNcczFXNjBmxa .arrowheadPath{fill:#333333;}#mermaid-svg-clEqNcczFXNjBmxa .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-clEqNcczFXNjBmxa .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-clEqNcczFXNjBmxa .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-clEqNcczFXNjBmxa .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-clEqNcczFXNjBmxa .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-clEqNcczFXNjBmxa .cluster text{fill:#333;}#mermaid-svg-clEqNcczFXNjBmxa .cluster span{color:#333;}#mermaid-svg-clEqNcczFXNjBmxa div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-clEqNcczFXNjBmxa :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Bidirectional Iterator Random Access Iterator Forward Iterator Input Iterator Output Iterator 下表显示了每种 STL 容器所支持的迭代器类型。 注意 vector 、 deque 、 list 、 set、 multiset 、 map 、 multimap以及 string 和数组都可以使用迭代器遍历。
容器支持的迭代器类型容器支持的迭代器类型vector随机访问迭代器set双向迭代器array随机访问迭代器multiset双向迭代器deque随机访问迭代器map双向迭代器list双向迭代器multimap双向迭代器forword_list前向迭代器unordered_set双向迭代器stack不支持迭代器unordered_multiset双向迭代器queue不支持迭代器unordered_map双向迭代器priority_queue不支持迭代器unordered_multimap双向迭代器
下表显示了在 STL容器的类定义中出现的几种预定义的迭代器 typedef。不是每种 typedef 都出现在每个容器中。 我们使用常量版本的迭代器来访问只读容器或不应该被更改的非只读容器使用反向迭代器来以相反的方向访问容器。
为迭代器预先定义的typedef的方向读写能力iterator向前读/写const_iterator向前读reverse_iterator向后读/写const_reverse_iterator向后读
下表显示了可作用在每种迭代器上的操作。 除了给出的对于所有迭代器都有的运算符迭代器还必须提供默认构造函数、拷贝构造函数和拷贝赋值操作符。 前向迭代器支持 和所有的输入和输出迭代器的功能。 双向迭代器支持–操作和前向迭代器的功能。 随机访问迭代器支持所有在表中给出的操作。 另外 对于输入迭代器和输出迭代器不能在保存迭代器之后再使用保存的值。
适用所有迭代器的操作描述p前置自增迭代器p后置自增迭代器pp1将一个迭代器赋值给另一个迭代器
输入迭代器描述*p间接引用一个迭代器p-m使用迭代器读取元素mpp1比较两个迭代器是否相等p!p1比较两个迭代器是否不相等
输出迭代器描述*p间接引用一个迭代器pp1把一个迭代器赋值给另一个
前向迭代器前向迭代器提供了输入和输出迭代器的所有功能。
双向迭代器描述–pqp–后置自减迭代器
随机访问迭代器描述pi迭代器p前进i个位置p-i迭代器p后退i个位置pi在迭代器p 的位置上前进i个位置p-i在迭代器p的位置上后退i个位置p-p1表达式的值是一个整数它代表同一个容器中两个元素间的距离p[i]返回与迭代器p的位置相距i的元素pp1若迭代器p小于p1(即容器中p在p1前则返回 true, 否则返回 falsepp1若迭代器p小千或等于p1 (即容器中p 在p1前或位咒相同则返回 true, 否则返回 falsepp1若迭代器p 大于p1(即容器中p在p1后则返回true, 否则返回falsepp1若迭代器p大于或等于p1(即容楛中p在p1后或位置相同则返回 true, 否则返回 false
四、map与unordered_map红黑树VS哈希表
C11 增加了无序容器 unordered_map/unordered_multimap 和unordered_set/unordered_multiset由于这些容器中的元素是不排序的因此比有序容器map/multimap 和 set/multiset 效率更高。 map 和 set 内部是红黑树在插入元素时会自动排序而无序容器内部是散列表 Hash Table通过哈希 Hash而不是排序来快速操作元素使得效率更高。由于无序容器内部是散列表因此无序容器的 key 需要提供 hash_value 函数其他用法和map/set 的用法是一样的。不过对于自定义的 key需要提供 Hash 函数和比较函数。
4.1、map和unordered_map的差别
1需要引入的头文件不同。
map: #include mapunordered_map: #include unordered_map
2内部实现机理不同。
map map内部实现了一个红黑树红黑树是非严格平衡二叉搜索树而AVL是严格平衡二叉搜 索树红黑树具有自动排序的功能因此map内部的所有元素都是有序的红黑树的每一个节点 都代表着map的一个元素。unordered_map: unordered_map内部实现了一个哈希表也叫散列表通过把关键码值映射到 Hash表中一个位置来访问记录查找的时间复杂度可达到O(1)其在海量数据处理中有着广泛应 用。因此其元素的排列顺序是无序的。
4.2、优缺点以及适用处
map
优点有序性这是map结构最大的优点其元素的有序性在很多应用中都会简化很多的操作 红黑树内部实现一个红黑书使得map的很多操作在log n 的时间复杂度下就可以实现因此效率非常的高。缺点空间占用率高因为map内部实现了红黑树虽然提高了运行效率但是因为每一个节点都需要额外保存父节点、孩子节点和红/黑性质使得每一个节点都占用大量的空间。适用处对于那些有顺序要求的问题用map会更高效一些。
unordered_map
优点 因为内部实现了哈希表因此其查找速度非常的快。缺点 哈希表的建立比较耗费时间。适用处对于查找问题unordered_map会更加高效一些因此遇到查找问题常会考虑一下用unordered_map。
4.3、小结
内存占有率的问题就转化成红黑树 VS hash表 , 还是unorder_map占用的内存要高。但是unordered_map执行效率要比map高很多。对于unordered_map或unordered_set容器其遍历顺序与创建该容器时输入的顺序不一定相同因为遍历是按照哈希表从前往后依次遍历的。
五、总结
C 参考手册重点学习C11起的容器。