|
今天由于需要,在这里做了一段测试代码。
测试vector和map的效能边界在哪里。
代码如下:- // STLTest.cpp : 定义控制台应用程序的入口点。
- //
- #include "stdafx.h"
- #include <map>
- #include <vector>
- #include <time.h>
- using namespace std;
- int GetRandom(int nMinNumber, int nMaxNumber)
- {
- return nMinNumber + (int)rand()%(nMaxNumber - nMinNumber);
- }
- int _tmain(int argc, _TCHAR* argv[])
- {
- typedef vector<int> vecData;
- typedef map<int, int> mapData;
- vecData m_vecData;
- mapData m_mapData;
- for(int i = 0; i < 10000; i++)
- {
- m_vecData.push_back(i);
- m_mapData.insert(mapData::value_type(i, i));
- }
- srand((unsigned)time(NULL));
- int nBase = 10;
- for(int k = 0; k < 5; k++)
- {
- nBase = nBase * 10;
- printf_s("**************(%d)*************\n", nBase);
- //计算vector统计成本
- clock_t ckStart;
- clock_t ckEnd;
- ckStart = clock();
- //随机找100万次查询
- for(int i = 0; i < nBase; i++)
- {
- int nKey = GetRandom(0, 9999);
- for(int j = 0; j < 10000; j++)
- {
- if(m_vecData[j] == nKey)
- {
- break;
- }
- }
- }
- ckEnd = clock();
- double ttime = (double)(ckEnd - ckStart) / CLOCKS_PER_SEC;
- printf_s("[vector]nBase = %d, timecost=%lf.\n", nBase, ttime);
- //计算map统计成本
- ckStart = clock();
- //随机找100万次查询
- for(int i = 0; i < 1000000; i++)
- {
- int nKey = GetRandom(0, 9999);
- mapData::iterator f = m_mapData.find(nKey);
- if(f == m_mapData.end())
- {
- printf_s("[map]No Find(%d).\n", nKey);
- }
- }
- ckEnd = clock();
- ttime = (double)(ckEnd - ckStart) / CLOCKS_PER_SEC;
- printf_s("[map]nBase=%d, timecost=%lf.\n", nBase, ttime);
- printf_s("***************************\n");
- }
- getchar();
- return 0;
- }
复制代码 输出如下:
**************(100)*************
[vector]nBase = 100, timecost=0.001000.
[map]nBase=100, timecost=0.160000.
***************************
**************(1000)*************
[vector]nBase = 1000, timecost=0.008000.
[map]nBase=1000, timecost=0.157000.
***************************
**************(10000)*************
[vector]nBase = 10000, timecost=0.050000.
[map]nBase=10000, timecost=0.164000.
***************************
**************(100000)*************
[vector]nBase = 100000, timecost=0.482000.
[map]nBase=100000, timecost=0.144000.
***************************
**************(1000000)*************
[vector]nBase = 1000000, timecost=4.485000.
[map]nBase=1000000, timecost=0.149000.
***************************
看来边界值在10000左右,知道这个边界,就知道怎么更好的利用容器了。
|
|