c++性能之map实现性能比较

http://www.cnblogs.com/zhjh256/p/6346501.html讲述了基本的map操作,在测试的时候,发现map的性能极为低下,与java相比相差了接近200倍。测试的逻辑如下:

    // map定义
    map<int, FirstCPPCls*> mapStudent;
    for (i=0;i<10000;i++) {
        FirstCPPCls clz;
        clz.setAppVersion("12.32.33");
        clz.setClusterName("osm-service");
        clz.setCompanyId("239383");
        clz.setServiceId("sysL.1.223");
        clz.setSubSystemId("23");
        clz.setSystemId("32");
        mapStudent.insert(pair<int, FirstCPPCls*>(i, &clz));
    }

    // 获取时间相对计数器, vc专用
    begin = GetTickCount();
    for (j=0;j<100;j++) {
        for (f=0;f<10000;f++) {
            // map查找
            mapStudent.find(f);
        }
    }
    end = GetTickCount();

    // 打印时间差
    cout << "Map查找耗时:" << (end - begin) << endl;  // 平均4秒左右
    system("pause");

在java中相同的实现,get 100 0000次只花费了20ms。于是搜索 c++ map性能,看了两个帖子如下:

http://blog.csdn.net/a418382926/article/details/22302907

http://blog.sina.com.cn/s/blog_5f93da790101hxxi.html

http://www.ideawu.net/blog/archives/751.html

随后,进行hash_map和unordered_map测试,如下:

    // hash_map定义
    hash_map<int, FirstCPPCls*> hash_mapStudent;
    for (i=0;i<10000;i++) {
        FirstCPPCls clz;
        clz.setAppVersion("12.32.33");
        clz.setClusterName("osm-service");
        clz.setCompanyId("239383");
        clz.setServiceId("sysL.1.223");
        clz.setSubSystemId("23");
        clz.setSystemId("32");
        hash_mapStudent.insert(pair<int, FirstCPPCls*>(i, &clz));
    }

    // 获取时间相对计数器, vc专用
    begin = GetTickCount();
    for (j=0;j<100;j++) {
        for (f=0;f<10000;f++) {
            // map查找
            hash_mapStudent.find(f);
        }
    }
    end = GetTickCount();

    // 打印时间差
    cout << "HashMap查找耗时:" << (end - begin) << endl;  // 平均4秒左右
    system("pause");

    // hash_map定义
    unordered_map<int, FirstCPPCls*> unordered_mapStudent;
    for (i=0;i<10000;i++) {
        FirstCPPCls clz;
        clz.setAppVersion("12.32.33");
        clz.setClusterName("osm-service");
        clz.setCompanyId("239383");
        clz.setServiceId("sysL.1.223");
        clz.setSubSystemId("23");
        clz.setSystemId("32");
        unordered_mapStudent.insert(pair<int, FirstCPPCls*>(i, &clz));
    }

    // 获取时间相对计数器, vc专用
    begin = GetTickCount();
    for (j=0;j<100;j++) {
        for (f=0;f<10000;f++) {
            // map查找
            unordered_mapStudent.find(f);
        }
    }
    end = GetTickCount();

    // 打印时间差
    cout << "UnorderedMap查找耗时:" << (end - begin) << endl;  // 平均4秒左右
    system("pause");

输出如下:

HashMap查找耗时:1610
请按任意键继续. . .
UnorderedMap查找耗时:1797
请按任意键继续. . .

虽然,相比std::map,确实提升了50%多,但是跟java,还是慢的一塌糊涂,因为对stl还没有研究,不确定具体什么原因导致。

时间: 2024-08-07 02:32:42

c++性能之map实现性能比较的相关文章

[Java] 多个Map的性能比较(TreeMap、HashMap、ConcurrentSkipListMap)

比较Java原生的 3种Map的效率. 1.  TreeMap 2.  HashMap 3.  ConcurrentSkipListMap 结果: 模拟150W以内海量数据的插入和查找,通过增加和查找两方面的性能测试,结果如下: Map类型 插入 查找(在100W数据量中)   10W 50W 100W 150W 0-1W 0-25W 0-50W Concurrent SkipListMap 62 ms 227 ms 433 ms 689ms 7 ms 80 ms 119 ms HashMap

Java里多个Map的性能比较(TreeMap、HashMap、ConcurrentSkipListMap)

问题 比较Java原生的 1.  TreeMap 2.  HashMap 3.  ConcurrentSkipListMap 3种Map的效率. 结果 模拟150W以内海量数据的插入和查找,通过增加和查找两方面的性能测试,结果如下: Map类型 插入 查找(在100W数据量中)   10W 50W 100W 150W 0-1W 0-25W 0-50W ConcurrentSkipListMap 62 ms 227 ms 433 ms 689ms 7 ms 80 ms 119 ms HashMap

Android App性能优化笔记之一:性能优化是什么及为什么?

By Long Luo 周星驰的电影<功夫>里面借火云邪神之口说出了一句至理名言:“天下武功,唯快不破”. 在移动互联网时代,同样如此,留给一个公司的窗口往往只有很短的时间,如何把握住这个时机,迅速开发出产品,成为至关重要的一环.相对传统互联网时代的PC产品,用户对移动端产品的容忍度更低.而一款移动应用在推出的时候可能只是接近完成的状态,这就需要通过快速的迭代开发来更新产品,不断完善产品来留住用户.同时,通过更新产品也能唤醒一些沉默用户,让一些原本下载了应用但使用次数非常少的用户给该应用多一次

性能优化——Web前端性能优化

核心知识点: 1.排查网站性能瓶颈的手法:分析各个环节的日志,找出异常部分 2.Web前端:网站业务逻辑之前的部分(浏览器.图片服务.CDN) 3.优化手段 1)浏览器优化 (1)减少http请求 a.http请求的开销:建立通信链路.进行数据传输.,同时要启动独立的线程去处理. b.减少http的手段:合并CSS.合并JavaScript,合并图片,这样浏览器就只有一次请求. (2)使用浏览器缓存 a.将静态资源缓存到客户浏览器上, b.更新时是生成新的JavaScript文件,并更改html

【转帖】AMD Zen 3处理器IPC性能提升17% 浮点性能大涨50%

AMD Zen 3处理器IPC性能提升17% 浮点性能大涨50% https://www.cnbeta.com/articles/tech/925543.htm AMD YES 下个月初发布7nm锐龙APU及移动版锐龙4000之后,AMD在7nm Zen2架构上就算是功德圆满了,剩下的就要全力以赴2020年要发布的7nm Zen3处理器了.最新消息对Zen3的性能提升非常乐观,认为浮点性能大涨50%,推动平均IPC性能提升17%,远超之前的预期. 访问购买页面: AMD旗舰店 目前我们能知道的就

(转)list 、set 、map 粗浅性能对比分析

本文分开介绍了List.Map.Set: (测试环境:win7.jdk.4G.i3:文章示例为了节省篇幅,只会列出测试大体形式和遍历次数) 第一部分:List 1.add(E e) ==============================性能测试================================= (1)表格统计的差异在于new的方式不同: [java] view plaincopy for (int i = 0; i < 10000; i++) { List<Integer

Java多线程 -- Map容器性能比较

单线程 单线程环境下可以使用HashMap和TreeMap.TreeMap上遍历返回结果是按照Key排序的. 测试方法 记录写入Map中N条记录的时间,单位毫秒. 记录从N条记录的Map中读取10W条记录的时间,单位毫秒. N=25W,50W,75W,100W 测试结果 写N条记录 25W  50W  75W  100W HashMap 28 49 72 92 TreeMap 131 321 527 748 N条记录中读10W数据 25W  50W  75W  100W HashMap 4 5

Map的性能

HashMap Map基于散列表的实现(它取代了Hashtable).插入和查询"键值对"的开销是固定的.可以通过构造器设置容量和负载因子,以调整容器的性能 LinkedHashMap  类似HashMap,但是迭代遍历它时,取得"键值对"的顺序是其插入次序,或者是最近最少使用(LRU)的次序.只比HashMap慢一点: 而在迭代访问时反而更快,因为它使用链表维护内部次序 TreeMap     基于红黑树实现.查看"键"或"键值对&q

map遍历性能记录

map遍历可以通过keySet或者entrySet方式. 性能上:entrySet略胜一筹,原因是keySet获取到key后再根据key去获取value,在查一遍,所以慢一些. keySet: //先获取map集合的所有键的Set集合 Set<String> keySet = map.keySet(); //有了Set集合,就可以获取其迭代器 Iterator<String> it = keySet.iterator(); while (it.hasNext()) { String