map和multimap的用法詳解

2021-09-21 14:44:55 字數 2778 閱讀 4602

一、map的文件總結

1、map是關聯式容器,它按照key值比較儲存,預設是小於;

2、在map中,鍵值key通常用於唯一的標識元素,而值value中儲存與此鍵值key關聯的內容;鍵值key和value的型別可能不同,並且在map的內部,key與value通過成員型別value_type繫結在一起,為其取別名為pair;

3、map中的元素是鍵值對;

4、map中的key是唯一的,並且不能修改,遇到重複的key就會插入失敗;但可以利用operator對value進行修改;

5、map的底層實現為紅黑樹,查詢效率比較高,是o(logn);

二、關於鍵值對pair

stl中對於鍵值對的定義:

template struct pair

pair(const t1&a, const t2&b)

: first(a)

, second(b)

{}};

三、map的重要介面

下面是這兩種插入方式的返回值的解釋:

下面介紹一下insert的使用

int main()

cout << endl;

system("pause");

return 0;

}

輸出結果:

可以看出在插入的時候,map進行了排序和去重。

2、刪除erase

3、交換swap

map的底層是乙個平衡搜尋樹( 紅黑樹),所以交換的時候只用交換根節點即可。

利用上述插入**,交換strs和m;

mapstrs;

strs.insert(make_pair("banana", "bbb"));

strs.insert(make_pair("banana", "***"));

strs.insert(make_pair("peach", "ppp"));

m.swap(strs);

輸出結果:

4、find    查詢鍵值為「x」的元素

返回值:

根據文件可看出,operator[ ] 插入的是key,返回的是與key對應的value。

先看一段**:

可以看出operator[ ] 中用到了插入函式,下面我們來分析一下這段讓各位童鞋頭疼的**:

需要注意的是,當key存在時,找到與key對應的value,然後返回其引用;

當key不存在時,operator[ ]用預設value與key構造鍵值對然後插入,返回該預設的value。

map/multimap和set/multiset都是關聯式容器,不支援對元素的直接訪問,通過迭代器進行,但是map有個例外,利用operator[ ]直接存元素,並且下標不一定是整型,可以是任意型別,這種介面視為關聯式陣列。

並且,利用這種方式插入元素不存在陣列越界的情況,如果使用乙個可以作為索引,而該key尚不存在map中,map會過載operator插入新元素,新元素的value值由建構函式確定,一般為0.

例如:

m["orange"] = "橘子";
會經歷如下操作:

處理  m["orange"]

如果map中存在鍵值」orange「的元素,則返回該元素的引用;

如果不存在,則自動建立值為「orange」的元素,key所對應的value由預設的建構函式賦值。

處理m["orange"] = "橘子"

橘子通過賦值操作賦值給新誕生的元素「orange」。

結合insert的**,輸出結果為:

使用下標操作符介面,map的插入更加便捷,但該方式在效率上,同其他安插方式相比較慢一些。

四、multimap基本用法

multimap和map的功能類似,就不一一介紹了,下面主要說一下這兩者的不同:

1、multimap中的key可以重複

2、multimap中沒有過載operator[ ]功能

3、對於重複的元素,查詢的時候也是返回中序遍歷的第乙個元素,至於為什麼,前面講set的時候已經介紹過了,若不理解,課參考這篇部落格:

multimap和map的例項

multimap的基本操作例項 include includeusing namespace std int main coutstring word hello ml.insert ml.insert make pair word,1 ml.insert pair word,2 ml.insert...

STL中的map和multimap小結

1 使用map multimap之前必須包含標頭檔案 include並且和所有的關聯式容器一樣,map multimap通常以平衡二叉樹來完成 2 namespacestd 第乙個template引數被當作元素的key,第二個當作元素的value。key value必須具備assignable和co...

STL之map和multimap總結

map c 預設建構函式 建立乙個空map multimap map c op 建立乙個空map multimap,並以op原則作為排序準則 map c c2 複製建構函式 建立乙個新的map multimap 作為c2的副本 所有元素都被複製 map c c2 複製建構函式 建立乙個新的map 作...