map本質上乙個平衡二叉樹(更準確地說是紅黑樹),那麼每個節點存放乙個資料,預設是key和value打包成乙個資料pair,以pair的形式存放在節點的,由此來看,pair裡面可以放任何資料,前提是pair必須可以比較大小,當然也可以自定義比較函式,而map的第三個引數就是指定自定義key的比較函式的。
//map的定義
//第一 第二 是key和value的型別
//第三個引數是關於key的比較函式 預設是less 參見less的定義——就是比較2個資料,小為真
//第四是節點資料儲存的方式 預設是pair的方式 即key與value打包在一起
template < class key,
// map::key_type
class t,
class compare = less
,// map::key_compare
class alloc = allocatorconst key,t>
>
// map::allocator_type
> class map;
//less 是乙個函式物件 過載()運算子
//所謂的比較函式定義格式為 bool cmp(const t& x, const t& y) 實現這個函式即可
template
struct less : binary_function
// 預設是降序排列
};
正是因為map的內部資料是有序的,才能保證map的高效查詢,資料有序,pair必須是可比較的,必須有比較函式。
如果key是整數、字串,則不需要提供比較函式,但是如果key是自己定義的資料型別,比如是乙個結構體,那就需要自己編寫比較函式了。
#include
#include
#include
using namespace std;
struct data };
typedef pair data_pair;
struct cmpdata //這樣單獨定義乙個函式物件也可以的};
intmain()
; data data2 =
; data data3 =
; data data4 =
;//插入資料
mapdata.
insert
(pair
(data1,
"china"))
; mapdata.
insert
(pair
(data3,
"english"))
; mapdata.
insert
(pair
(data4,
"japan"))
; mapdata.
insert
(pair
(data2,
"american"))
;//遍歷
map::iterator it;
for(it = mapdata.
begin()
; it != mapdata.
end();
it++
)//查詢
it = mapdata.
end();
it = mapdata.
find
(data2);if
(it != mapdata.
end())
else
//直接索引
printf
("print data3, value=%s\n"
, mapdata[data3]
.c_str()
);return0;
}輸出:
uid=
1004
, name:james
uid=
1003
, name:lucy
uid=
1002
, name:jack
uid=
1001
, name:jim
find data2, uid=
1002
, value=american
print data3, value=english
就是定義的類過載了operator() 操作符。物件可以像函式指標一樣使用。
#include
using namespace std;
class funcobject};
nt main()
函式物件可以代替函式指標,比指標更加靈活,因為物件是可以有狀態的。
標準庫定義了一組算術、關係與邏輯函式物件類
例如 less、greater
int
main()
輸出:result1=
1result2=
1
namespace std ;}
其實就是包含了2個物件分別是 first second
std:
:make_pair(10
,'d');
//可以用make_pair建立乙個pair物件
template
pair make_pair (t1 x, t2 y)
map的insert表示插入資料,如果key已經存在,將不做任何操作,key不存在,則插入資料。
pair insert (
const value_type& val)
;
關於返回值:
由以上可知,insert操作,,和通過下標索引操作還是不一樣的。
通過下標操作一定會修改map,例如map[k1]=v1,如果k1存在,會修改k1的值,k1不存在,則插入key的鍵值對。
STL中map使用詳解
1.map中的建構函式 map 預設建構函式 map const map m 拷貝建構函式 map iterator begin,iterator end 區間建構函式 2.資料插入 insert pair key1,value1 例 mapmapstudent mapstudent.insert ...
STL中map用法詳解
map是stl的乙個關聯容器,它提供一對一 其中第乙個可以稱為關鍵字,每個關鍵字只能在 map中出現一次,第二個可能稱為該關鍵字的值 的資料處理能力,由於這個特性,它完成有可能在我們處理一對一資料的時候,在程式設計上提供快速通道。這裡說 下map內部資料的組織,map內部自建一顆紅黑樹 一種非嚴格意...
STL中map用法詳解
說明 如果你具備一定的c template知識,即使你沒有接觸過stl,這個文章你也應該可能較輕易的看懂。本人水平有限,不當之處,望大家輔正。一 map概述 map是stl的乙個關聯容器,它提供一對一 其中第乙個可以稱為關鍵字,每個關鍵字只能在map中出現一次,第二個可能稱為該關鍵字的值 的資料處理...