一、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 作...