MAP,HASH_MAP和数组时间对比

  1 // ConsoleApplication5.cpp : 定义控制台应用程序的入口点。
  2 //
  3
  4 #include "stdafx.h"
  5
  6 #include <iostream>
  7 #include <hash_map>
  8 #include <map>
  9 #include <ctime>
 10
 11 using namespace std;
 12
 13 void testMap()
 14 {
 15     map<int, int> m;
 16     clock_t t1 = clock();
 17
 18     for (int i = 0; i < 1000; i++)
 19     {
 20         for (int j = 0; j < 1000; j++)
 21         {
 22             int tmp = (i << 16) + j;
 23             m[tmp] = 1;
 24         }
 25     }
 26     clock_t t2 = clock();
 27
 28     cout << "MAP: Add item time is " << ((double)(t2 - t1) / CLOCKS_PER_SEC) << "S" << endl;
 29
 30     clock_t t3 = clock();
 31     int sum = 0;
 32     for (int i = 0; i < 1000; i++)
 33     {
 34         for (int j = 0; j < 1000; j++)
 35         {
 36             int tmp = (i << 16) + j;
 37             sum += m[tmp];
 38         }
 39     }
 40
 41     clock_t t4 = clock();
 42
 43     cout << "MAP: look for item time is " << ((double)(t4 - t3) / CLOCKS_PER_SEC) << "S" << sum << endl;
 44
 45     int count = 0;
 46     clock_t t5 = clock();
 47     for (int i = 0; i < 1000; i++)
 48     {
 49         for (int j = 0; j < 1000; j++)
 50         {
 51             int tmp = (i << 16) + j;
 52             if (m[tmp] > 0)
 53             {
 54                 count++;
 55             }
 56         }
 57     }
 58
 59     clock_t t6 = clock();
 60     cout << "MAP: Calc Item time is " << ((double)(t6 - t5) / CLOCKS_PER_SEC) << "S,Count = " << count << endl;
 61 }
 62
 63 void testHashMap()
 64 {
 65     hash_map<int, int> m;
 66     clock_t t1 = clock();
 67
 68     for (int i = 0; i < 1000; i++)
 69     {
 70         for (int j = 0; j < 1000; j++)
 71         {
 72             int tmp = (i << 16) + j;
 73             m[tmp] = 1;
 74         }
 75     }
 76     clock_t t2 = clock();
 77
 78     cout << "HASH_MAP:time is " << ((double)(t2 - t1) / CLOCKS_PER_SEC) << "S" << endl;
 79
 80     clock_t t3 = clock();
 81     int sum = 0;
 82     for (int i = 0; i < 1000; i++)
 83     {
 84         for (int j = 0; j < 1000; j++)
 85         {
 86             int tmp = (i << 16) + j;
 87             sum += m[tmp];
 88         }
 89     }
 90
 91     clock_t t4 = clock();
 92
 93     cout << "HASH_MAP:time is " << ((double)(t4 - t3) / CLOCKS_PER_SEC) << "S, sum = " << sum << endl;
 94
 95     int count = 0;
 96     clock_t t5 = clock();
 97     for (int i = 0; i < 1000; i++)
 98     {
 99         for (int j = 0; j < 1000; j++)
100         {
101             int tmp = (i << 16) + j;
102             if (m[tmp] > 0)
103             {
104                 count++;
105             }
106         }
107     }
108
109     clock_t t6 = clock();
110     cout << "HASH_MAP: Calc Item time is " << ((double)(t6 - t5) / CLOCKS_PER_SEC) << "S,Count = " << count << endl;
111 }
112
113 void tesArray()
114 {
115     clock_t t1 = clock();
116
117     int *m = new int[1024 * 1024];
118     memset(m, 0, sizeof(*m));
119
120     for (int i = 0; i < 1000; i++)
121     {
122         for (int j = 0; j < 1000; j++)
123         {
124             int tmp = (i << 10) + j;
125             m[tmp] = 1;
126         }
127     }
128     clock_t t2 = clock();
129
130     cout << "ARRAY:time is " << ((double)(t2 - t1) / CLOCKS_PER_SEC) << "S" << endl;
131
132     clock_t t3 = clock();
133     int sum = 0;
134     for (int i = 0; i < 1000; i++)
135     {
136         for (int j = 0; j < 1000; j++)
137         {
138             int tmp = (i << 10) + j;
139             sum += m[tmp];
140         }
141     }
142
143     clock_t t4 = clock();
144
145     cout << "ARRAY:time is " << ((double)(t4 - t3) / CLOCKS_PER_SEC) << "S" << sum << endl;
146
147     int count = 0;
148     clock_t t5 = clock();
149     for (int i = 0; i < 1000; i++)
150     {
151         for (int j = 0; j < 1000; j++)
152         {
153             int tmp = (i << 10) + j;
154             if (m[tmp] > 0)
155             {
156                 count++;
157             }
158         }
159     }
160
161     clock_t t6 = clock();
162     cout << "ARRAY: Calc Item time is " << ((double)(t6 - t5) / CLOCKS_PER_SEC) << "S,Count = " << count << endl;
163
164     delete[] m;
165 }
166
167 int _tmain(int argc, _TCHAR* argv[])
168 {
169     testMap();
170     testHashMap();
171     tesArray();
172     return 0;
173 }

VS2013 + WIN7 64运行结果:

MAP: Add item time is 0.265S
MAP: look for item time is 0.094S1000000
MAP: Calc Item time is 0.094S,Count = 1000000
HASH_MAP:time is 0.203S
HASH_MAP:time is 0.047S, sum = 1000000
HASH_MAP: Calc Item time is 0.047S,Count = 1000000
ARRAY:time is 0S
ARRAY:time is 0S1000000
ARRAY: Calc Item time is 0S,Count = 1000000

时间: 2024-10-16 09:13:12

MAP,HASH_MAP和数组时间对比的相关文章

JavaScript数组方法对比(深度学习数组)

JavaScript数组方法对比 众所周知,JavaScript提供了许多对数组进行改变的方法,但是有些会对原数组进行影响,有些不会.下边就列举出来. 一.新增 影响原数组 array.push()  //向数组的末尾添加一个或更多元素,并返回新的长度. var array =[1,2,3,4,5]; array.push(6); // [1,2,3,4,5,6]; array.unshift() //向数组的开头添加一个或更多元素,并返回新的长度. var array =[1,2,3,4,5]

指针与数组的对比

C++/C程序中,指针和数组在不少地方可以相互替换着用,让人产生一种错觉,以为两者是等价的. 数组要么在静态存储区被创建(如全局数组),要么在栈上被创建.数组名对应着(而不是指向)一块内存,其地址与容量在生命期内保持不变,只有数组的内容可以改变. 指针可以随时指向任意类型的内存块,它的特征是“可变”,所以我们常用指针来操作动态内存.指针远比数组灵活,但也更危险. 下面以字符串为例比较指针与数组的特性. 7.3.1修改内容 示例7-3-1中,字符数组a的容量是6个字符,其内容为hello\0.a的

将json格式日期(毫秒数)转成日常日期格式和日常格式时间对比

第一:是把生成的Json格式的时间转换,注意要看清楚时间的格式 function (cellval) { var date = new Date(parseInt(cellval.replace("/Date(", "").replace(")/", ""), 10)); var month = date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1

一、jQuery的ready与javascript中的onload加载时间对比

<script type="text/javascript"> var strtime = new Date().getTime(); $(function(){ var end1 = new Date().getTime(); var t1 = end1 - strtime; $("body").append("<p>jquery加载时间为: "+t1+"秒</p>"); }) funct

iOS时间处理之时间对比 by Nicky.Tsui

通过项目需求, 服务器返回了一个 order_canceled_time 订单自动取消时间   如果我要跟当前时间做一个对比,然后生成出一个倒计时的时间  那么首先我们要知道 order_canceled_time这个字段返回的时间格式 "order_canceled_time" = "2015-08-20 13:50:40"; 以这个时间为例,格式是 "年-月-日 时-分-秒" 把这个格式的时间用 NSDateFormatter 转换成NSDa

【转】计算机算加减乘除的时间对比

转自http://blog.sina.com.cn/s/blog_8b4181c701015mij.html Intel Pentium CPU计算加减乘除的指令周期 [加法]: 指令 指令周期 adc 寄存器, 立即数 1 adc 寄存器, 寄存器 1 adc 寄存器, 内存 2 adc 内存,   立即数 3 adc 内存,   寄存器 3 add 寄存器, 立即数 1 add 寄存器, 寄存器 1 add 寄存器, 内存 2 add 内存, 立即数 3 add 内存, 寄存器 3 inc

python init 方法 与 sql语句当前时间对比

def init(self,cr): tools.sql.drop_view_if_exists(cr, 'custrom_product_infomation_report') cr.execute(""" create or replace view custrom_product_infomation_report as ( select t0.id,t0.hpartner_id as hpartner_id, t0.khwl_code as khwl_code,t1.

深度理解map hash_map set

map VS hash_map 1)map存储的时候为排好序的,所以输出时候也是排序的.而hash_map不是的. 2)map具有稳定性,底层存储为树,这种算法差不多相当与list线性容器的折半查找的效率一样,都是O (log2N). hash_map使用hash表来排列配对,hash表是使用关键字来计算表位置.当这个表的大小合适,并且计算算法合适的情况下,hash表的算法复杂度为O(1)的,但是这是理想的情况下的,如果hash表的关键字计算与表位置存在冲突,那么最坏的复杂度为O(n). 3) 

Javascript数组和php数组遍历对比介绍

javascripe 和 php 的数组都是 map 类型的,也就是 key 值类型不限制那种.下面我对比下俩种数组的遍历方式: 1 : javascript数组遍历使用了 in 这个操作符,例如 for(key in arr),则遍历过程中 key 会被赋值为 arr 数组中的key,通过 arr[key] 获取 value. for(key in arr){ console.log("arr[" + key + "] = " + arr[key]); } 2:p