作业帮 > 综合 > 作业

hash_map可以通过second找first吗?

来源:学生作业帮 编辑:百度作业网作业帮 分类:综合作业 时间:2024/07/22 22:59:43
hash_map可以通过second找first吗?
hash_map可以通过second找first吗?
map这个容器本来的设计就是一个映射.只能通过first映射到second,不提供逆映射功能.hash_map只是map的另一种实现,也不能这样的.当然,你要的功能也不是完全不可以实现,你可以遍历这个map里边的所有pair项,查找second与你想要的匹配的pair,这个first就是你要找的映射之一.当然,还要继续搜索下去,因为会有重复.
再问: 谢谢你的帮助,不好意思能不能再问你一个问题。我记得在hash_map中存储结构是vector;(first是存储在list中,但是second是存在哪里?是和first在一起的那个list节点吗?如果是这样的话,那么映射函数就只对first映射到一个逻辑位置。)但是如果是把first和second组织一个映射关系的话,那他们的逻辑位置又是怎么样的呢?
再答: 不对的,源码里边hash_map数据的组织形式是这样的: typedef hashtable ht; ht rep; first与second一起存储在pair中(first为const Key类型,second为T类型) 而pair是存在hash_table,哈希表中,这也是hash_map与map相比的特点,与之对应的,map中: typedef rb_tree rep_type; rep_type t; // red-black tree representing map 它的基本结构是红黑树。
再问: 既然是存放在一起的,那它的意思是不是在hash_map中不存在把first映射到second的映射函数,只是简单的把他们放在一起表示这个两个东西是对映的。嗯map的搜索效率就是树高,但是平衡二叉树的建树时间实在有点长。我记得红黑树的定义中有这么一句话: 从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点,这句话我一直不理解,为什么它就能保证这个红黑树能在一定程度上平衡呢?能不能精辟的解释一下这句话?