结论如下:

Release模式下:

1. 容量为10的时候,查找效率:map > unordered_map > hash_map

2. 容量为100的时候,查找效率:map = unordered_map > hash_map

3. 容量为1000的时候,查找效率:unordered_map > hash_map > 4倍map

4. 容量为1万的时候,查找效率:hash_map > unordered_map > 4倍map

5. 容量为10万的时候,查找效率:hash_map > unordered_map > 4倍map

6. 容量为100万的时候,查找效率:hash_map > unordered_map > 1.6倍map

7. 容量为1000万的时候,查找效率:hash_map > unordered_map > 1.4倍map

8. 容量为1亿的时候,程序崩溃了,哈哈哈哈哈哈,如果你知道原因请告诉我

9. debug模式下和release模式下,差距非常大,几百倍的差距。。。。。

Debug模式下:

1. 查找效率:hash_map > unordered_map > map

2. 随着容量的增加,hash_map, unordered_map的查找效率有所降低,但浮动不大毕竟是常量级别。map的效率直线下降。。。

3. 容量为一千万的时候,程序同样崩溃

实验结果如下图:

Release模式                                                                                Debug模式(注意:相比Release模式还降低了10倍的查询量)

    

代码如下:

#include<iostream>
#include<map>
#include<hash_map>
#include<unordered_map>
#include<boost/progress.hpp>using namespace std;
using namespace boost;// 测试函数,
// size        :    map的实际大小
// times    :    查找的轮次,每一轮次都从0查找到size-1
void test(int size, int times)
{cout << "size=" << size << "; times=" << times << endl;map<int, int>                m;unordered_map<int, int>        um;hash_map<int, int>            hm;// 初始化for (int i = 0; i<size; i++){m[i] = i;um[i] = i;hm[i] = i;}// map的查找{int count = 0;progress_timer t; // progress_timer变量会在创建时计时,析构时自动打印出耗时,所以不会受到前面初始化的影响,下同,不再解释for (int i = 0; i<times; i++){for (int j = 0; j<size; j++){if (m.find(j) != m.end()){count++;}}}cout << "count:" << count <<", map:";}// unordered_map的查找{int count = 0;progress_timer t;for (int i = 0; i<times; i++){for (int j = 0; j<size; j++){if (um.find(j) != um.end()){count++;}}}cout << "count:" << count << ", unordered_map:";}// hash_map的查找{int count = 0;progress_timer t;for (int i = 0; i<times; i++){for (int j = 0; j<size; j++){if (hm.find(j) != hm.end()){count++;}}}cout << "count:" << count << ", hash_map:";}
}int main()
{test(10,10000000);        // 容量:10        查找:1千万轮次test(100, 1000000);        // 容量:100        查找:1百万轮次test(1000, 100000);        // 容量:1000        查找:10万轮次test(10000, 10000);        // 容量:10000    查找:1万轮次test(100000, 1000);        // 容量:100000    查找:1000轮次test(1000000, 100);        // 容量:1000000    查找:100轮次test(10000000, 10);        // 容量:10000000    查找:10轮次getchar();return 0;
}

map unordered_map hash_map的查找性能测试相关推荐

  1. C++ std map unordered_map hash_map 的查找性能测试代码及结果

    C++ std map unordered_map hash_map 的查找性能测试代码.过程及结果 测试环境 测试结果 测试代码 测试过程记录 测试版本 RLEASE x64 测试版本 Debug ...

  2. map vs hash_map

    1. map, multimap, set, multiset g++ 中 map, multimap, set, multiset 由红黑树实现 map: bits/stl_map.h multim ...

  3. 关于STL中的map和hash_map

    在网上看到有关STL中hash_map的文章,以及一些其他关于STL map和hash_map的资料,总结笔记如下:     1.STL的map底层是用红黑树实现的,查找时间复杂度是log(n):   ...

  4. map和hash_map

    list支持快速的插入和删除,但是查找费时; vector支持快速的查找,但是插入费时. map查找的时间复杂度是对数的,这几乎是最快的,hash也是对数的.  如果我自己写,我也会用二叉检索树,它在 ...

  5. map按value值查找——find_if的使用(转载)

    map按value值查找--find_if的使用(转载) 1 #ifndef _CVALUEFIND_H_2 #define _CVALUEFIND_H_3 #include <string&g ...

  6. c++ map 查找性能测试

    最近在为推荐服务作性能调优,这个服务的主要逻辑是用离线计算的模型数据给请求中的每个广告打分,再返回这些广告的排序结果,这里面打分的过程其实就用请求中的数据拼成各种key,去查一个大的 map,这种计算 ...

  7. 【c++】8.map和vector容器查找、删除指定元素、emplace、insert

    1.查找与删除 vector 和 map 容器中指定元素 vector 查找或删除vector的指定元素"123" 方法1:使用迭代器 不同于map(map有find方法),vec ...

  8. c++ map unordered_map使用大全

    1.插入元素 map中插入元素的方法有如下集中 1.1 直接用[]符 map<int, string> mymap; mymap[1] = "a"; map的源码中重载 ...

  9. unordered_map学习之查找操作和观察器操作count,find, contains(C++20),equal_range,hash_function, key_eq

    本篇学习unordered_map的查找操作和观察器相关的操作,具体的函数如下: count (C++11) 返回匹配特定键的元素数量 (公开成员函数) find (C++11) 寻找带有特定键的元素 ...

最新文章

  1. 计算机网络的性能指标和非性能特征
  2. ubuntu18.04上安装ffmpeg
  3. 2021杨雪洋高考成绩查询,青春由磨砺而岀彩,人生因奋斗而升华 ——我校隆重举行2021届高考备考动员暨学业水平考试表彰大会...
  4. 7款Flash和Javascript网页视频播放器
  5. MYSQL常用函数以及分组操作
  6. c库函数tmpfile
  7. linux常用高级命令,Linux常用高级文件操作命令
  8. 无忧PHP企业网站内容管理系统源码v2.8 标准版
  9. java sbyte_Java Byte parseByte()方法
  10. Unix C编程:共享内存示例 测试代码
  11. 【文摘】《创新者》-沃尔特·艾萨克森
  12. 为何3Dmax渲染的图偏暗?跟伽马有影响吗?
  13. 保研之路——上交大电子系直博
  14. 一个海量在线用户即时通讯系统(IM)的完整设计
  15. uiuc大学计算机排名2019,2019年QS世界大学排名伊利诺伊大学香槟分校排名第71
  16. 虚拟内购服务器,苹果APP内购客户付款成功,没收到相应虚拟产品的解决办法
  17. 深度学习第一章(rnn)
  18. 人工智能原理笔记------知识表示方法
  19. 浅谈Linux USB设备驱动
  20. android数据线投屏电视机,手机投屏电视的几种方式点评

热门文章

  1. 中石油训练赛 - Gone Fishing(固定大小的圆可以覆盖最多的点)
  2. CodeForces - 1426E Rock, Paper, Scissors(最小费用最大流+最大费用最大流)
  3. CodeForces - 1409F Subsequences of Length Two(dp)
  4. CodeForces - 1334D Minimum Euler Cycle(构造+模拟)
  5. 洛谷 - P4014 分配问题(费用流/KM)
  6. POJ - 2226 Muddy Fields(最小点覆盖-二分图最大匹配)
  7. ctab法提取dna流程图_【分子】DNA的提取与检测(下)——质粒DNA
  8. malloc的内存分配之 malloc(0)的内存分配情况
  9. 长连接和Keepalive
  10. RTC 技术知识体系