map和hash_map性能測試

轉自:http://blog.sina.com.cn/s/blog_5378b2830100c5a4.html


  大家都知道map是使用樹來做查找算法,而hash_map使用hash表來排列配對,是使用關鍵字來計算表位置。那使用起來他們的差別主要是什麼呢?對於性能差別是什麼,適合什麼情況下應用呢?於是我對它們進行了一些測試,並記錄了測試數據供大家分享。測試的內容主要是map和hash_map的添加、刪除、查找和遍歷操作,首先進行了幾組測試,分別是10萬次、30萬次,時間單位均爲毫秒,具體的性能對照如下:

hash_map(10萬) map(10萬) hash_map(20萬) map(20萬) hash_map(30萬) map(30萬)

添加 93   47  156   94  203   172
遍歷 16   15  16   16  16   15
查找 0   0  32   31  31   32
刪除 8422   32  33765   63  76016   78
    

通過上面的數據比較,我們很容易發現hash_map的添加和刪除操作比map要慢,尤其是刪除操作hash_map比map可能慢1000倍;從而得到結論是刪除和插入操作較多的情況下,map比hash_map的性能更好,添加和刪除的數據量越大越明顯。但我們使用map、hash_map一般都用於查找和遍歷較多,而且上述測試數據也不能反映出這兩方面的性能差距,於是繼續對查找和遍歷進行了性能測試,得到具體數據如下,時間單位仍爲毫秒:

hash_map(100萬) map(100萬) hash_map(200萬) map(200萬) hash_map(300萬) map(300萬)

遍歷 94   31  203   32  297   47
查找 94   234  188   531  281   875


通過上面的測試數據可以得出結論是map的遍歷性能高於hash_map,而查找性能則相反,hash_map比map要好,數據量越大查找次數越多,表現就越好。
    兩大組測試完畢,整體結論也可以得出:一般應用情況下,我們保存的數據不超過100萬份,查找的頻繁程度不高情況下使用map性能比較好;而保存的數據較多時(超過100萬),查找頻繁時使用hash_map的性能就高於map了。

測試環境具體如下:
操作系統:Windows XP Professional (5.1, Build 2600) Service Pack 3 (2600.xpsp_sp3_gdr.080814-1236)
編譯環境:Microsoft Visual C++ 2005   55603-007-4000003-41525
處理器:Intel(R) Core(TM)2 Duo CPU     P8600  @ 2.40GHz (2 CPUs)
內存:2044MB RAM,


      另外,整個測試僅使用物理內存,而沒有虛擬內存,使用Release版本直接在控制檯中運行,而沒有在IDE中運行,避免影響性能;且對於較短時間計時,少於20毫秒以下可能不準確。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章