`
kmplayer
  • 浏览: 509777 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

使用map和hash_map的效率问题

阅读更多
1,选择map容器,是为了更快的从关键字查找到相关的对象。
与使用list这样的线性表容器相比,一可以简化查找的算法,二可以使任意的关键字做索引,并与目标对象配对,优化查找算法。
在C++的STL中map是使用树来做查找算法,这种算法差不多相当与list线性容器的折半查找的效率一样,都是 O(log2N),而list就没有map这样易定制和操作了。

2,相比map,hash_map使用hash表来排列配对,hash表是使用关键字来计算表位置。当这个表的大小合适,并且计算算法合适的情况下,hash表的算法复杂度为O(1)的,但是这是理想的情况下的,如果hash表的关键字计算与表位置存在冲突,那么最坏的复杂度为O(n)。

3,树查找,在总查找效率上比不上hash表,但是它很稳定,它的算法复杂度不会出现波动。在一次查找中,你可以断定它最坏的情况下其复杂度不会超过 O(log2N)。而hash表就不一样,是O(1),还是O(N),或者在其之间,你并不能把握。

4,总结:
选用map还是hash_map,关键是看关键字查询操作次数,以及你所需要保证的是查询总体时间还是单个查询的时间。
如果是要很多次操作,要求其整体效率,那么使用hash_map,平均处理时间短。
如果是少数次的操作,使用hash_map可能造成不确定的O(N),那么使用平均处理时间相对较慢、单次处理时间恒定的map。
分享到:
评论

相关推荐

    hash_map的简单应用

    hash_map

    hash_map的详解

    让我们来看一个简单的例子,演示如何使用`hash_map`来存储整数ID和其相关信息: ```cpp #include <hash_map> #include #include using namespace std; int main() { hash_map, string> idInfo; // 插入数据 ...

    c++中hash_table以及std::map应用案例

    代码重点是hash_table,附加std::map与其做对比,实现的是一条sql语句:select c_nationkey, c_mktsegment, count(*), max(c_acctbal) from aaa_customer_1g group by c_nationkey, c_mktsegment order by c_...

    linux hash_map

    不过,由于`hash_map`并不是C++标准库的一部分,使用时需要注意它可能存在的移植性和兼容性问题。在C++11及以后的版本中,推荐使用`std::unordered_map`,它是标准库的一部分,具有更好的跨平台性和性能。

    Hash_map 实现源码

    哈希映射(Hash Map)是一种常见的数据结构,它提供了键值对(Key-Value Pair)的快速存储和检索功能。在C++中,STL(Standard Template Library)提供了一个名为`std::unordered_map`的容器,它是基于哈希表实现的...

    C++哈希表使用的好文章-Hash_Map

    哈希表,作为一种高效的数据结构,它通过哈希函数将数据映射到特定的位置,从而实现快速的查找、插入和删除操作。C++中的`hash_map`虽然未被正式纳入标准...正确地选择和使用`hash_map`,能够显著提升程序的运行效率。

    dense_hash_map:STD的简单替代

    jg :: dense_hash_map 一个简单的std::unordered_map替代品,具有更好的性能,但失去了稳定的寻址方式,这是一种折衷方案。 在此处查看此哈希图的详细说明: : 生成状态: 特拉维斯(Travis):

    哈希映射 hash map

    当我们使用`hash_map`时,我们需要提供两个关键组件:哈希函数(Hash Function)和比较函数(Comparison Function)。哈希函数将键转换为数组下标,确保键值对能够被均匀地分布在各个桶中,减少冲突的可能性。比较...

    cpp-sparsemap一个高效hashmap和hashset的C实现

    本文将深入探讨一种名为cpp-sparsemap的实现,它是一个高效且轻量级的哈希映射(HashMap)和哈希集合(HashSet)的C++实现,主要由Tessil团队开发,并存储于Tessil-sparse-map-162cc7b版本的代码库中。 cpp-...

    Hash Map for geeks_hashmap_Geeks_源码

    标题中的“Hash Map for geeks_hashmap_Geeks_源码”显然指的是一个关于哈希映射(HashMap)的学习资源,特别针对极客和普通程序员。哈希映射是一种数据结构,它允许我们以O(1)的时间复杂度进行插入、删除和查找操作...

    key是string的hash_map

    本实例实现了一个hash_map,key是string类型,即可以存储索引是string的数据,希望对大家有帮助

    检索速度最快的哈希算法和map

    对于c++程序来说 map的使用无处不在。影响程序性能的瓶颈也往往是map的性能。尤其在大数据情况下,以及业务关联紧密而无法实现数据分发和并行处理的情况。map的性能就成了最关键的技术。 比如:ip表、mac表,电话...

    linked_hash:L链式哈希[LRU]用于C ++的快速,仅标头,跨平台和类似STL的linked_hash_map和linked_hash_set。 (在leetcode上击败100%的提交)

    而链式哈希(linked_hash)在此基础上,进一步优化了查找、插入和删除操作的效率,特别是在实现LRU(Least Recently Used,最近最少使用)缓存策略时,这种数据结构的优势尤为突出。本文将详细介绍C++中的linked_...

    C++中的哈希容器unordered_map使用示例

    随着C++0x标准的确立,C++的标准库中也终于有了hash table这个东西。...不过由于hash表的性能优势,它的使用面还是很广的,于是第三方的类库基本都提供了支持,比如MSVC中的<hash>和Boost中的<boost/unorde

    SGISTL.zip_sgi stl_sgistl_sgistl hash_m_sgistl windows

    - `hashtable.h`:实现哈希表容器,如hash_set、hash_multiset、hash_map和hash_multimap,提供快速的平均查找和插入性能。 - `deque.h`:双端队列,允许在两端进行插入和删除操作。 - `list.h`:链表,支持快速...

    pwwHash.zip_Big!_hash map

    _hash map"这个压缩包可能包含了一种专为大数据设计的高效哈希表实现,它的应用和价值在于能够帮助我们快速处理海量数据,提高数据分析和处理的效率,从而在商业决策、预测模型等领域创造巨大的价值。

    利用Java的HashMap 改造C++ 的hash_map

    结合Java的HashMap中的一些优点,改进了C++ 的hash_map。 详细说明见我的博客:http://blog.csdn.net/mdj67887500/article/details/6907702

    All hash ids_hash_Table_

    哈希表(Hash Table)是一种数据结构,它通过关联键(Key)与值(Value)实现高效的数据存储和检索。在“所有哈希ids_hash_Table_”这个主题中,我们聚焦于利用哈希表来创建作弊表,这可能是为了在游戏中快速查找...

    TBB并发容器 学习笔记

    3. `concurrent_hash_map`:这是一个线程安全的哈希映射,允许并发的读写操作。它在多线程环境下提供高效的数据查找和更新,同时确保数据一致性。 相比于传统的STL容器,TBB并发容器的优势在于它们在设计时考虑了多...

    总结Nginx 的使用过程中遇到的问题及解决方案

    [emerg]: could not build the proxy_headers_hash, you should increase either proxy_headers_hash_max_size: 512 or proxy_headers_hash_bucket_size: 64  解决办法就是在配置文件中新增以下配置项: 代码如下...

Global site tag (gtag.js) - Google Analytics