linux下使用hash_map及stl總結
linux下使用hash_map及stl總結出處:hash_map不是c++標準庫的一部分,但因其重要性很多庫(如sgi stl、boost等)實現了hash_map,包括g++編譯器所帶的標頭檔案也包含了hash_map的實現**(其實現為sgi stl的版本),其在include/ext目錄下,該目錄還包含了hash_set,rope等的實現。
// 檔案/usr/include/c++/4.4.0/ext/hash_map
_glibcxx_begin_namespace(__gnu_cxx)
65 66 using std::equal_to;
67 using std::allocator;
68 using std::pair;
69 using std::_select1st;
70 71 /**
72 * this is an sgi extension.
73 * @ingroup sgiextensions
74 * @doctodo
75 */
76 template,
77 class _equalkey = equal_to<_key>, class _alloc = allocator<_tp> >
78 class hash_map
首先從上述標頭檔案開始的部分可以發現,hash_map定義在__gnu_cxx命名空間中,故你必須在使用時限定名字空間__gnu_cxx::hash_map,或者使用using關鍵字,如下例:
#include
using namespace __gnu_cxx;
int main()
stl其它標頭檔案資訊:
1.幾乎所有的容器都在同名的標頭檔案裡,比如,vector在中宣告,list在中宣告等。例外的是和。宣告了set和multiset,宣告了map和multimap。
2. 除了四個演算法外,所有的演算法都在中宣告。例外的是accumulate、inner_product、adjacent_difference和partial_sum。這些演算法在中宣告。
3.特殊的迭代器,包括istream_iterators和istreambuf_iterators,在中宣告。
4.標準仿函式(比如less)和仿函式介面卡(比如not1、bind2nd)在中宣告。
白話HashMap原始碼(下)
這一篇主要看一下遍歷相關的原始碼。override public boolean containskey object key int hash collections.secondaryhash key hashmapentry tab table for hashmapentrye tab ha...
HashMap原始碼分析 下
本節將分析hashmap的增刪改查 首先來說hashmap的插入流程 1.計算下標 2.何時擴容 3.何時鍊錶轉紅黑樹,具體如下 1 首先進行雜湊值的擾動,獲取新的hash值,key null 0 h key.hashcode h 16 2 判斷tab是否為空或者長度為0,如果是則進行擴容操作。if...
使用entrySet遍歷HashMap
現象描述 在生成環境發現,偶爾生產環境的某台機器cpu使用率很高,經過定位發現是有乙個大的hashmap hashmap裡面存放了大量資料,比如1w條 做迴圈引起的。遍歷乙個hashmap for iterator ite map.keyset iterator ite.hasnext 通過map類...