c++知识总结(3)

关联容器支持高校的关键字查找和访问。两个主要的关联容器类型是map和set。map中的元素时一些关键字-值对:关键字起到索引的作用,值则表示与索引相关联的数据。set中每个元素只包含一个关键字;set支持高校的关键字查询操作——检查一个给定关键字是否在set中。

按关键字有序保存元素:

map 关联数组;保存关键字-值对

set 关键字即值,即只保存关键字的容器

multimap 关键字可重复出现的map

multiset 关键字可重复出现的set

无序集合

unordered_map 用哈希函数组织的map

unordered_set  用哈希函数组织的set

unordered_multimap  哈希组织的map;关键字可以重复出现

unordered_multiset哈希组织的set;关键字可以重复出现


关联容器底层(map, set, multimap, multiset)实现是用非线性存储方式,那么这种非线性存储方式是“红黑树”,红黑树是平衡二叉树的一种,有以下特点:

(1)所有左子树节点的值小于等于根节点的值,右子树节点的值大于根节点的值。

(2)没有一个节点深度过大。

通过上面,就可以知道,关联容器是平衡二叉树的具体应用,因为其内部是通过链表的方式组织,所以在插入的时候比vector要快,比list要慢;由于底层是平衡二叉树,查找、插入、删除时间复杂度都应该为O(logN)。


新标准定义了4个无序关联容器。这些容器不是使用比较运算来组织元素,而是使用一个哈希函数和关键字类型的==运算符。在关键字类型的元素没有明显的序关系的情况下,无序容器是非常有用的。在关键类型的元素没有明显的序关系的情况下,无序容器是非常有用的。在某些应用中,维护元素的序代价非常高昂,此时无序容器也很有用。

管理桶

无序容器在存储上组织为一组桶,每个桶保存零个或多个元素。无序容器使用一个哈希函数将元素映射到桶。为了访问一个元素,容器首先计算元素的哈希值,它指出应该搜索哪个桶。容器将具有一个特定哈希值的所有元素都保存在相同的桶中。如果容器允许重复关键字,所有具有相同关键字的元素都会在同一个桶中。因此,无序容器的性能依赖于哈希函数的质量和桶的数量和大小。

对于相同的参数,哈希函数必须总是产生相同的结果。理想情况下,哈希函数还能将每个特定的值映射到唯一的桶。但是,将不同关键字的元素映射到相同的桶也是允许的。当一个桶保存多个元素时,需要顺序搜索这些元素来查找我们想要的那个。计算一个元素的哈希值和在桶中搜索通常都是很快的操作。但是,如果一个桶中保存了很多元素,那么查找一个特定元素就需要大量比较操作。


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值