STL中map的使用詳解

2021-08-31 21:23:52 字數 2998 閱讀 1993

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中出現一次,第二個可能稱為該關鍵字的值 的資料處理...