map在stl中的定義
template , class alloc = alloc>
第乙個引數key是關鍵字型別
第二個引數t是值型別
第三個引數compare是比較函式(仿函式)
第四個引數是記憶體配置物件
map內部儲存機制實際是以紅黑樹為基礎,紅黑樹在插入節點時,必須依照大小比對之後在乙個合適的位置上執行插入動作。所以作為關鍵字,起碼必須有「<」這個比較操作符。我們知道,int,float,enum,size_t等等簡單關鍵字,都有內建的比較函式,與map搭配無論是插入還是查詢,都沒什麼問題。但是作為複雜資料型別,如果沒有明確定義「<」比較操作符,就不能與map直接搭配使用,除非我們自己定義第三個引數。
在選擇map的關鍵字時,注意以下兩點,同時這兩點也是改錯的方法:
a) 關鍵字明確定義「<」比較操作符
b) 沒有「<」比較操作符,自定義仿函式替代第三個引數compare,該仿函式實現「()」操作符,提供比較功能。插入時各節點順序以該仿函式為綱。
以std::pair為關鍵字摻入map
下面我們先寫乙個有錯誤的函式,在分析錯誤原因之後,逐步進行修正。
#include
int main()
這個程式一定失敗,如果非要如此使用,上述a方法顯然不適合,std::pair是已定義好的結構體不可修改。只能使用b方法了,定義乙個比較類改造如下:
<」比較函式。因為struct st是我們自己定義的結構體,所以修改這個程式可以使用上面a、b兩種方法。我們先談第一種,第一次修改時我也搞錯了,我是這樣定義比較函式的。
st(int x, int y):a(x), b(y){}
bool operator < (const struct st &rs) };
class key
;bool operator <(const key &key1,const key &key2)
{ if(key1._keyclassmap;
key one(1);
classmap.insert(make_pair(one,1));
key two(2);
classmap.insert(make_pair(two,2));
key three(3);
classmap.insert(make_pair(three,3));
map::iterator itor=classmap.begin();
while(itor!=classmap.end())
{ cout map在stl中的定義 template class alloc alloc 第乙個引數key是關鍵字型別 第二個引數t是值型別 第三個引數compare是比較函式 仿函式 第四個引數是記憶體配置物件 map內部儲存機制實際是以紅黑樹為基礎,紅黑樹在插入節點時,必須依照大小比對之後在乙個合適的位置上... 資料出處 map在stl中的定義 template class alloc alloc 第乙個引數key是關鍵字型別 第二個引數t是值型別 第三個引數compare是比較函式 仿函式 第四個引數是記憶體配置物件 map內部儲存機制實際是以紅黑樹為基礎,紅黑樹在插入節點時,必須依照大小比對之後在乙個合... map在stl中的定義 template class alloc alloc 第乙個引數key是關鍵字型別 第二個引數t是值型別 第三個引數compare是比較函式 仿函式 第四個引數是記憶體配置物件 map內部儲存機制實際是以紅黑樹為基礎,紅黑樹在插入節點時,必須依照大小比對之後在乙個合適的位置上...Map以自定義類做為鍵值
Map以自定義類做為鍵值
Map以自定義類做為鍵值