C++ STL中map/unordered_map/vector效率及內存消耗情況對比

  • 測試總結
    待補充
  • 運行結果
Paste_Image.png
  • 代碼片段
  DWORD key = 0;

  auto nowClock = GetTickCount();
  vector<pair<DWORDLONG, FileInfo>> data;
  vector<SortItem> itemdata;
  FileInfo file_info;

  HANDLE handle = GetCurrentProcess();
  PROCESS_MEMORY_COUNTERS pmc;
  GetProcessMemoryInfo(handle, &pmc, sizeof(pmc));
  ULONG mem_size = pmc.WorkingSetSize / 1024;
  
  for (DWORD i = 0; i < 10000000; i++) {
    int key = rand() % 100000;
    key += i;
    file_info.parent_fid = key;
    data.push_back(make_pair(key, file_info));
  }

  GetProcessMemoryInfo(handle, &pmc, sizeof(pmc));
  cout << "vector插入1000萬條數據,耗時:" << (GetTickCount() - nowClock) << "ms" << " 消耗內存:" << pmc.WorkingSetSize / 1024 - mem_size << " K" << endl;
  mem_size = pmc.WorkingSetSize / 1024;

nowClock = GetTickCount();
  std::sort(data.begin(), data.end());
  cout << "vector排序1000萬條數據,耗時:" << (GetTickCount() - nowClock) << "ms" << endl;

key = data[rand() % 900000].first;

  nowClock = GetTickCount();
  if (binary_search(data, key) > -1)
    cout << "vector從1000萬條數據查找,耗時:" << (GetTickCount() - nowClock) << "ms" << endl;

  cout << "===========================================================" << endl;

  nowClock = GetTickCount();
  unordered_map<DWORDLONG, FileInfo> unordered_map_data;
  for (DWORD i = 0; i < 10000000; i++) {
    file_info.parent_fid = key;
    unordered_map_data[i] = file_info;
  }
  GetProcessMemoryInfo(handle, &pmc, sizeof(pmc));
  cout << "unordered_map插入1000萬條數據,耗時:" << (GetTickCount() - nowClock) << "ms" << " 消耗內存:" << pmc.WorkingSetSize / 1024 - mem_size << " K" << endl;
  mem_size = pmc.WorkingSetSize / 1024;

nowClock = GetTickCount();
  if (unordered_map_data.find(key) != unordered_map_data.end())
    cout << "unordered_map從1000萬條數據查找,耗時:" << (GetTickCount() - nowClock) << "ms" << endl;

  cout << "===========================================================" << endl;

  nowClock = GetTickCount();
  map<DWORDLONG, FileInfo> map_data;
  for (DWORD i = 0; i < 10000000; i++) {
    file_info.parent_fid = key;
    map_data[i] = file_info;
  }
  GetProcessMemoryInfo(handle, &pmc, sizeof(pmc));
  cout << "map插入1000萬條數據,耗時:" << (GetTickCount() - nowClock) << "ms" << " 消耗內存:" << pmc.WorkingSetSize / 1024 - mem_size << " K" << endl;;
  mem_size = pmc.WorkingSetSize / 1024;

nowClock = GetTickCount();
  if (map_data.find(key) != map_data.end())
    cout << "map從1000萬條數據查找,耗時:" << (GetTickCount() - nowClock) << "ms" << endl;
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容