为什么调用 std:map:clear 后内存占用率没有降低

此模板类描述用于控制 std::pair<const Key, Ty> 类型的变长元素序列的对象。 序列由哈希函数弱排序,哈希函数将此序列分区到称为存储桶的有序序列集中。 在每个存储桶中,比较函数将确定任一元素对是否具有等效顺序。 每个元素存储两个对象,包括一个排序键和一个值。 序列以允许查找、插入和移除任意元素的方式表示,并包含与序列中的元素数量无关的多个操作(常量时间),至少在所有存储桶长度大致相等时如此。 在最坏情况下,当所有元素位于一个存储桶中时,操作数量与序列中的元素数量成比例(线性时间)。 此外,插入元素不会使迭代器失效,移除元素仅会使指向已移除元素的迭代器失效。


  
相等比较函数对象类型。

该对象通过调用两个存储的对象类型的比较函数对象控制的序列进行排序和类型的哈希函数对象。 通过调用成员函数访问的第一个存储的对象(); 以及通过调用成员函数访问第二个存储的对象()。 具体而言,对于所有

此对象还存储最大加载因子,用于指定每个存储桶的元素的最大所需平均数量。 如果插入元素导致 ()超过最大加载因子,容器将增加存储桶的数量并根据需要重新生成哈希表。

受控序列中元素的实际顺序取决于哈希函数、比较函数、插入顺序、最大加载因子和存储桶的当前数量。 通常无法预测受控序列中的元素顺序。 但是,可以始终确保具有等效顺序的任何元素子集在受控序列中相邻。

该对象分配和释放它控制通过存储的分配器对象的类型的序列的存储。 此分配器对象必须与 allocator 模板类的对象的外部接口相同。 请注意,已分配容器对象时,不复制存储的分配器对象。

用于管理存储的分配器的类型。


  

该类型是模板参数 Alloc的同义词。

 
 
 
 

  

  

对找到的元素数据值的引用。

如果未找到参数键值,函数将引发类 out_of_range的对象。

 
 
 
 

指定受控序列或存储桶的开头。

 

前两个编号函数返回向前迭代器,指向序列的第一个元素(或紧邻空序列后的位置)。 最后两个成员函数返回一个向前迭代器,指向存储桶 nbucket 的第一个元素(或刚超出空存储桶末尾的位置)。

 
 
 
 
 
 
 

  

获取键值的存储桶编号。


  

成员函数返回当前与键值 keyval对应的存储桶编号。

 
 
 
 
 
 

  

  

该成员函数将返回存储桶的当前数量。

 
 
 
 
 
 
 
 
 
 
 

  

成员函数返回编号为 nbucket的存储桶的大小。

 
 
 
 
 
 

  

返回确定范围中第一个元素地址的 const 迭代器。


  

const 前向访问迭代器,指向范围的第一个元素,或刚超出空范围末尾的位置(对于空范围,cbegin() == cend())。

由于使用 cbegin 的返回值,因此不能修改范围中的元素。

可以使用此成员函数替代 begin() 成员函数,以保证返回值为 const_iterator。 通常情况下,结合使用类型推导关键字,如下面的示例中所示。

 

返回一个 const 迭代器,此迭代器用于发现刚超出范围中最后一个元素的位置。


  

指向刚超出范围末尾的位置的 const 向前访问迭代器。

cend 用于测试迭代器是否超过了其范围的末尾。

可以使用此成员函数替代 end() 成员函数,以保证返回值为 const_iterator。 通常情况下,结合使用类型推导关键字,如下面的示例中所示。

 

不应对 cend 返回的值取消引用。

 
 
 
 
 
 
 
 
 
 

受控序列的常量迭代器的类型。


  

此类型描述为可用作受控序列的常量向前迭代器的对象。 在此处描述为实现定义的 T1类型的同义词。

 
 
 
 
 

受控序列的常量存储桶迭代器的类型。


  

该类型描述了可用作存储桶的常量向前迭代器的对象。 在此处描述为实现定义的 T5类型的同义词。

 
 
 
 
 
 

  

元素的常量指针的类型。


  

该类型描述了可用作指向受控序列中元素的常量指针的对象。

 
 
 
 
 

元素的常量引用的类型。


  

该类型将可作为常量引用的对象描述为受控序列中的元素。

 
 
 
 
 

查找与指定键匹配的元素数。


  

成员函数返回由分隔的范围中的元素数目(keyval)

 
 
 
 
 
 

  

两个元素间的带符号距离的类型。


  

带符号的整数类型描述一个可表示受控序列中任意两个元素的地址之间的差异的对象。 在此处描述为实现定义的 T3类型的同义词。

 
 
 
 
 
 
 

  

插入到 unordered_map 中 (执行任何复制或移动操作) 就地构造的元素。


  
用于构造的元素插入到 unordered_map 中,除非它已经包含具有相对有序值的元素的转发参数。

一个pairbool组件返回如果插入,则 true 和 falseunordered_map已经包含其键具有等效值的顺序,并其迭代器组件返回的地址,如果新元素插入,或者如果该元素已找到一个元素。

若要访问一个对的迭代器组件pr返回此成员函数,使用pr.first,并取消引用指针,使用*(pr.first)。 访问bool组件的一对pr返回此成员函数,使用pr.second

此函数不会使迭代器或引用无效。

在插入期间,如果引发了异常但未发生在容器的哈希函数中,则不会修改此容器。 如果在哈希函数中引发异常,则未定义此结果。

有关代码示例,请参阅。

使用位置提示就地插入构造的元素(不执行复制或移动操作)。


  
用于构造的元素插入到 unordered_map 中,除非 unordered_map 已包含该元素,或一般来讲,除非已包含其键的元素具有相对有序的转发参数。
有关开始搜索正确插入点的位置的提示。

指向新插入的元素的迭代器。

如果因元素已存在导致插入失败,则将迭代器返回现有元素。

没有引用是因为此函数而失效。

在插入期间,如果引发了异常但未发生在容器的哈希函数中,则不会修改此容器。 如果在哈希函数中引发异常,则未定义此结果。

的元素是一个对,以便元素的值将与密钥值相等的第一个组件和元素的数据值相等的第二个组件的有序的对。

有关代码示例,请参阅。

对于空受控序列,该成员函数返回 true。

 
 
 
 
 
 
 
 
 
 
 

前两个成员函数返回一个向前迭代器,它指向刚超出序列末尾的位置。 最后两个成员函数返回一个向前迭代器,它指向刚超出存储桶 nbucket末尾的位置。

查找与指定键匹配的范围。


  

成员函数返回一对迭代器 X ,以便 [X.first, X.second) 仅分隔受控序列中与 keyval具有等效排序的那些元素。 如果不存在此类元素,则两个迭代器均为 end()

 
 
 
 
 
 
 

  

在从指定位置 unordered_map 中移除一个元素或某个范围的元素或移除与指定的键匹配的元素。


  

要移除的第一个元素的位置。

要移除的刚超出最后一个元素的位置。

要移除的元素的关键值。

对于前两个成员函数,一个双向迭代器指定的任何已移除的元素或如果此类元素不存在,则映射的结尾的元素之外保留的第一个元素。

对于第三个成员函数,返回已从 unordered_map 中删除的元素的数目。

有关代码示例,请参阅。

查找与指定键匹配的元素。


  
 
 
 
 
 
 
 

  

获取存储的分配器对象。


  

该成员函数将返回存储的分配器对象。

 
 
 
 

  

获取存储的哈希函数对象。


  

成员函数将返回存储的哈希函数对象。

 
 
 
 

  

该类型是模板参数 Hash的同义词。

 
 
 
 

  
 
 
 
 
 
要插入到 unordered_map 中的元素的值(除非它已经包含一个具有相对有序的键的元素)。
开始搜索正确插入点的位置。
指定 unordered_map 可用于构造的元素的参数类型的模板参数,和完美转发Val作为参数。
要复制的第一个元素的位置。
要复制的最后一个元素以外的位置。
满足的要求的模板函数参数,它指向的类型,可以用来构造元素对象。

单个元素成员函数 (1) 和 (2) 返回其bool组件是如果完成插入,true 和 false 如果 unordered_map 已经包含一个其键具有等效值在排序中的元素。 返回值对的迭代器组件将指向新插入的元素(如果

附带提示的单个元素的成员函数 (3) 和 (4) 返回迭代器,该迭代器指向将新元素插入到 unordered_map 中的位置,如果具有等效键的元素已经存在,则指向现有元素。

任何迭代器、指针或引用都不会因为此函数而失效。

在只插入单个元素的过程中,如果引发异常,但是异常并未在容器的哈希函数中发生,则不会修改该容器的状态。 如果在哈希函数中引发异常,则未定义此结果。 在插入多个元素的过程中,如果引发异常,则会使容器处于未指定但有效的状态。

若要访问的迭代器组件pair``pr所返回的单个元素成员函数,请使用pr.first; 若要将取消引用迭代器定位在返回的配对,请使用*pr.first,为您提供一个元素。 要访问 bool 组件,请使用 pr.second。 有关示例,请参阅本文后面的示例代码。

V>。 元素的值是一个有序对,其中第一个组件相当于键值,第二个组件相当于该元素的数据值。

范围成员函数 (5) 将元素值序列插到 unordered_map 中,它对应于迭代器在范围 [First, Last) 中所处理的每一个元素;因此,不会插入 Last。 容器成员函数 end() 是指容器中最后一个元素之后的位置,例如,m.insert(v.begin(), v.end()); 语句尝试将 v 的所有元素插入到 m 中。 只插入在该范围中具有唯一值的元素;忽略副本。 若要观察拒绝了哪些元素,请使用单个元素版本的 insert

初始值设定项列表成员函数 (6) 使用将元素复制到 unordered_map。

有关就地构造的元素的插入 — 也就是说,执行任何复制或移动操作 — 请参阅和。

有关代码示例,请参阅。

受控序列的迭代器的类型。

该类型描述为可用作受控序列的前向迭代器的对象。 在此处描述为实现定义的 T0类型的同义词。

 
 
 
 
 

获取存储的比较函数对象。

成员函数将返回存储的比较函数对象。

 
 
 
 

  

该类型是模板参数 Pred的同义词。

 
 
 
 

  

该类型是模板参数 Key的同义词。

 
 
 
 
 
 
 

  

对每个存储桶的平均元素数进行计数。


  
 
 
 
 
 
 
 
 
 
 
 

  

此类型描述可用作存储桶的向前迭代器的对象。 在此处描述为实现定义的 T4类型的同义词。

 
 
 
 
 
 

  

与每个键关联的映射值的类型。

该类型是模板参数 Ty的同义词。

 
 
 
 
 
 
 

  

  

该成员函数将返回当前允许的最大存储桶数。

 
 
 
 
 
 
 
 
 
 
 

获取或设置每个存储桶的最多元素数。

 

第一个成员函数将返回存储的最大加载因子。 第二个成员函数将用 factor替换已存储的最大加载因子。

 
 
 
 
 
 
 
 
 
 
 

获取受控序列的最大大小。


  

该成员函数将返回对象可控制的最长序列的长度。

 
 
 
 

查找或插入具有指定键的元素。


  

对插入元素的数据值的引用。

如果未找到自变量键值,则它将与数据类型的默认值一起插入。

使用 operator[] 插入元素时,返回的引用不指示插入是更改预先存在的元素还是创建一个新元素。 成员函数和可以用于确定具有指定键的元素是否已插入前存在。

 
 
 
 
 
 
 
 
 

  

此成员函数将确定迭代器where的返回值作为 ( (keyval, Ty())。 (如果不存在此元素,它将插入具有指定键的元素。)随后它将返回对 (*where).second 的引用。


  
 
 
 
 
 

指向元素的指针的类型。


  

该类型描述了可用作指向受控序列中元素的指针的对象。

 
 
 
 
 

  

该类型描述了可用作对受控序列中元素的引用的对象。

 
 
 
 
 

  

成员函数将存储桶数更改为至少 nbuckets 并根据需要重新生成哈希表。

 
 
 
 
 
 
 
 
 
 

成员函数将返回受控序列的长度。

 
 
 
 
 
 
 
 
 
 

两个元素间的无符号距离的类型。

无符号的整数类型描述可表示任何受控序列长度的对象。 在此处描述为实现定义的 T2类型的同义词。

 
 
 
 

  

right.get_allocator(),那么在常量时间内,它将引发异常只能通过复制存储的特征类型的对象的Tr,而没有引用、 指针或指定两个受控序列的元素的迭代器会使它无效。 否则,它所执行的元素分配和构造函数调用数量会与两个受控序列中的元素数量成正比。

 
 
 
 
 
 
 
 
 
 
 

  

  
要存储的比较函数对象。
要存储的哈希函数对象。

第一个构造函数指定通过 right 控制的序列副本。 第二个构造函数指定空的受控序列。 第三个构造函数插入元素值 [first, last) 的序列。 第四个构造函数通过移动 right 指定序列副本。

所有构造函数还初始化若干存储的值。 对于复制构造函数,值从 Right 获取。 否则:

存储桶的最少数量是参数 Bucket_count(如果有);否则它为默认值,即此处描述为实现定义的值 N0

哈希函数对象是参数 Hash(如果有);否则为 Hash()

比较函数对象是参数 Comp(如果有);否则为 Pred()

分配器对象是参数 Al(如果有);否则为 Alloc()

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

  

  

该类型描述了受控序列的元素。

 
 
 
 
 
 
 

  

我要回帖

更多关于 std::map 的文章

 

随机推荐