關於map,hash map小資料量查詢效率的問題

2021-07-22 08:48:37 字數 4988 閱讀 3493

關於map>

multimap

hash_map>

hash_multimap

對於資料量不大情況下的測試情況:

hash_map執行時間為868.575351秒

hash_multimap 執行時間892.441939秒

multimap執行時間為749.253617秒

// algorithm.cpp : 定義控制台應用程式的入口點。

//#include "stdafx.h"

#include

#include

#include

#include

#include

#include

#include

#include

#include

using namespace std; int _tmain(int argc, _tchar* argv) ; auto minpos = min_element(coll.begin(), coll.end()); cout << "min : " << *minpos << endl; auto maxpos = max_element(coll.begin(), coll.end()); cout << "max : " << *maxpos << endl; sort(coll.begin(),coll.end()); for (auto elem : coll) cout << endl; auto pos3 = find(coll.begin(),coll.end(),3); auto pos6 = find(coll.begin(),coll.end(),6); reverse(pos3,pos6); for (auto elem : coll) cout << endl; /*處理多重區間(multipleranges)*/ list

coll1 = ; vector

coll2; //resize 的作用是改變coll2的元素個數 coll2.resize(coll1.size()); copy(coll1.cbegin(),coll1.cend(),coll2.begin()); deque

coll3(coll1.size()); copy(coll1.begin(),coll1.end(),coll3.begin()); /*hash_map*/ #if 0 hash_multimap

t_hash_map; t_hash_map.insert(make_pair(1,"aa")); t_hash_map.insert(make_pair(1,"bb")); t_hash_map.insert(make_pair(1,"cc")); t_hash_map.insert(make_pair(2, "22")); t_hash_map.insert(make_pair(3, "33")); t_hash_map.insert(make_pair(7, "77")); t_hash_map.insert(make_pair(4, "44")); t_hash_map.insert(make_pair(4, "444")); t_hash_map.insert(make_pair(4, "4444")); t_hash_map.insert(make_pair(5, "55")); t_hash_map.insert(make_pair(6, "66")); t_hash_map.insert(make_pair(4, "44444")); t_hash_map.insert(make_pair(5, "555")); t_hash_map.insert(make_pair(6, "666")); t_hash_map.insert(make_pair(4, "444444")); t_hash_map.insert(make_pair(4, "4444444")); t_hash_map.insert(make_pair(7, "77777")); multimap

multimap_map; multimap_map.insert(make_pair(1, "aa")); multimap_map.insert(make_pair(1, "bb")); multimap_map.insert(make_pair(1, "cc")); multimap_map.insert(make_pair(2, "22")); multimap_map.insert(make_pair(3, "33")); multimap_map.insert(make_pair(7, "77")); multimap_map.insert(make_pair(4, "44")); multimap_map.insert(make_pair(4, "444")); multimap_map.insert(make_pair(4, "4444")); multimap_map.insert(make_pair(5, "55")); multimap_map.insert(make_pair(6, "66")); multimap_map.insert(make_pair(4, "44444")); multimap_map.insert(make_pair(5, "555")); multimap_map.insert(make_pair(6, "666")); multimap_map.insert(make_pair(4, "444444")); multimap_map.insert(make_pair(4, "4444444")); multimap_map.insert(make_pair(7, "77777")); hash_map

> map_vec; map

> m_map_vec; vector

t_vec; t_vec.push_back("aa"); t_vec.push_back("bb"); t_vec.push_back("cc"); map_vec.insert(make_pair(1,t_vec)); m_map_vec.insert(make_pair(1, t_vec)); t_vec.clear(); t_vec.push_back("22"); map_vec.insert(make_pair(2,t_vec)); m_map_vec.insert(make_pair(2, t_vec)); t_vec.clear(); t_vec.push_back("33"); map_vec.insert(make_pair(3,t_vec)); m_map_vec.insert(make_pair(3, t_vec)); t_vec.clear(); t_vec.push_back("55"); t_vec.push_back("555"); map_vec.insert(make_pair(5, t_vec)); m_map_vec.insert(make_pair(5, t_vec)); t_vec.clear(); t_vec.push_back("66"); t_vec.push_back("666"); map_vec.insert(make_pair(6, t_vec)); m_map_vec.insert(make_pair(6, t_vec)); t_vec.clear(); t_vec.push_back("44"); t_vec.push_back("444"); t_vec.push_back("4444"); t_vec.push_back("44444"); t_vec.push_back("444444"); t_vec.push_back("4444444"); map_vec.insert(make_pair(4,t_vec)); m_map_vec.insert(make_pair(4, t_vec)); t_vec.clear(); t_vec.push_back("77"); t_vec.push_back("77777"); map_vec.insert(make_pair(7, t_vec)); m_map_vec.insert(make_pair(7, t_vec)); t_vec.clear(); large_integer f; queryperformancefrequency(&f);//獲取內部高精度計數器的頻率 double dfreq; dfreq = (double)f.quadpart; //獲取計數器的頻率 large_integer time_start, time_end; queryperformancecounter(&time_start);//獲取內部高精度計數器當前的計數值 for (auto i = 1; i < 1000000; i++) #else auto start = m_map_vec.equal_range(4).first; auto end = m_map_vec.equal_range(4).second; for (auto map_iterator = start; map_iterator != end; map_iterator++) for (auto vec_iterator = map_iterator->second.begin(); vec_iterator != map_iterator->second.end();vec_iterator++) #endif #else #if 0 auto start = map_vec.equal_range(4).first; auto end = map_vec.equal_range(4).second; for (auto hash_iterator = start; hash_iterator != end; hash_iterator++) for (auto vec_iterator = hash_iterator->second.begin(); vec_iterator != hash_iterator->second.end();vec_iterator++) #else auto start = multimap_map.equal_range(4).first; auto end = multimap_map.equal_range(4).second; for (auto multimap_iterator = start; multimap_iterator != end; multimap_iterator++) #endif #endif } queryperformancecounter(&time_end); //時間差 = 計數值差/頻率(單位s) double duration = (double)(time_end.quadpart - time_start.quadpart) / dfreq; printf("%f\n", duration);// 3.969499 #endif /*re*/ getchar(); return 0; } empty

關於Python中小資料池的理解

1 首先理解 is 和 的區別 python中的物件可以理解為包括以下幾個要素 id 身份標識 type 資料型別 value 資料值 is和 的區別就是 is 比較的是資料的id值,也就意味著只要 a is b true 的話,a和b指向的是同乙個物件 比較的是資料的value值。2 塊與 塊的快...

硬碟小資料

今天我們來研究下硬碟。簡單敘述,我也不太知道的硬碟歷史,據說第一塊硬碟是1956年,很大,從那時候ibm就建立了硬碟的基本架構。那些古老的硬碟架構我沒去了解過,不管那麼多。就說現在的機械硬碟。結構如圖,不多說 磁頭 磁頭其實就是乙個電磁鐵,線圈 鐵芯,如圖 原理 這裡我要多說的是這個磁碟的讀寫原理。...

關於DecimalFormat 小數的保留位數

除法結果保留兩位小數,小數保留前導零 decimalformat df1 new decimalformat 0.0 保留1位小數,帶前導零 decimalformat df2 new decimalformat 保留1位小數,可以不帶前導零 decimalformat df3 new decima...