STL 之map,multimap
生活随笔
收集整理的這篇文章主要介紹了
STL 之map,multimap
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
頭文件:
mType<type1,type2> tmap() ? ? ? ? ? ? ? ? ? ?默認構造方法 mType<type1,type2> tmap(beg,end) ? ? 通過迭代器構造 map<int,string>?intmap;?? map<string,string?>?othermap;?? multimap<int,string>?stringMultiMap;?? multimap<string,?string?>?otherStringMultiMap;?? tmap.insert(pair<type1,tpye2>) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 添加一個鍵值對 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
tmap.insert(map<type1,type2>::value_type(key,value)) ? ? ? ? ? ? ? ? ? 添加 一個map
tmap[key] = value ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 通過索引添加// 若key不存在是添加操作,存在是修改操作
tmap.find(key) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 查找,返回迭代器,沒有找到返回最后一個元素的迭代器
tmap.erase(pos) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?通過迭代器刪除
tmap.clear() ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 刪除所有元素
#include?<iostream>?? #include?<iterator>?? #include?<string>?? #include?<map>?? ?? using?namespace?std;?? ?? int?main()?{?? ?? ????map?<string,string>?stringMap;?? ????//?增加?------------------------------------------------------------------------------------?? ????stringMap["A"]="Apple";?//?沒有找到A,自動添加?? ????stringMap["A"]="Ada";???//?找到A,修改?? ????stringMap.insert(pair<string,string>("B","Boy"));?//?插入B?? ????stringMap.insert(pair<string,string>("B","Bad"));?//?重復insert?失敗?? ????stringMap.insert(map<string,string>::value_type("C","Cat"));?//?插入C?? ????stringMap["D"]="Dog";???//?插入D?? ?? ????map<string,string>::iterator?stringMapItr;?? ????//?遍歷?------------------------------------------------------------------------------------?? ????//?遍歷map中的類容?? ????cout?<<?"stringMap:"?<<?endl;?? ????for?(stringMapItr?=?stringMap.begin();stringMapItr?!=?stringMap.end();stringMapItr?++)?? ????{?? ????????cout?<<?"key="?<<?stringMapItr->first?<<?",value="?<<?stringMapItr->second?<<?endl;?? ????}?? ?? ????//?查找?------------------------------------------------------------------------------------?? ????//?通過索引方式查找?-??? ????//?如果查出成功返回?value,如果查找不成功將會自動插入鍵值(臟值)?? ????string?getValue?=?stringMap["C"];?? ????cout?<<?"string[\"C\"]="?<<?getValue?<<?endl;?? ?? ????//?通過迭代器查找?-?? ????//?如果查出成功返回?對應位置迭代器,如果查找不成功返回最后一個元素的下一個迭代器?? ????stringMapItr?=?stringMap.find("C");?? ????if(stringMapItr?!=?stringMap.end())?{?? ????????cout?<<?"\"C\"?is?find"?<<?endl;?? ????}?else?{?? ????????cout?<<?"\"C\"?is?not?find"?<<?endl;?? ????}?? ?? ????//?刪除?------------------------------------------------------------------------------------?? ????stringMapItr?=?stringMap.begin();?? ?? ????//?用迭代器擦除?? ????stringMap.erase(stringMapItr);?? ?? ????//?遍歷map中的類容?? ????cout?<<?"stringMap?earse?A:"?<<?endl;?? ????for?(stringMapItr?=?stringMap.begin();stringMapItr?!=?stringMap.end();stringMapItr?++)?? ????{?? ????????cout?<<?"key="?<<?stringMapItr->first?<<?",value="?<<?stringMapItr->second?<<?endl;?? ????}?? ?? ????//?刪除所有元素?? ????stringMap.clear();?? ?? ????//?遍歷map中的類容?? ????cout?<<?"stringMap?clear:"?<<?endl;?? ????for?(stringMapItr?=?stringMap.begin();stringMapItr?!=?stringMap.end();stringMapItr?++)?? ????{?? ????????cout?<<?"key="?<<?stringMapItr->first?<<?",value="?<<?stringMapItr->second?<<?endl;?? ????}?? ?? ????return?0;?? }??
#include <map>
map和multimap的唯一區別:map中不可以包含重復鍵值,而multimap中可以。
構造方法
示例:
注:1,C++中map 用紅黑樹構造,時間復雜度為log(n)
2,可以用非標準的hash_map代替,其頭文件在#include<hash_map>,要權衡時間,空間等合理選擇。
操作:
map 和 multimap 用法大致相同,示例代碼是map的操作
示例代碼:
運行結果:
stringMap:
key=A,value=Ada
key=B,value=Boy
key=C,value=Cat
key=D,value=Dog
string["C"]=Cat
"C" is find
stringMap earse A:
key=B,value=Boy
key=C,value=Cat
key=D,value=Dog
stringMap clear:
總結
以上是生活随笔為你收集整理的STL 之map,multimap的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: STL 之随机访问迭代器
- 下一篇: STL 之accumulate,adja