您好,登錄后才能下訂單哦!
Map是STL的一個關聯容器,它提供一對一(其中第一個可以稱為關鍵字,每個關鍵字只能在map中出現一次,第二個可能稱為該關鍵字的值)的數據處理能力,由于這個特性,它完成有可能在我們處理一對一數據的時候,在編程上提供快速通道。map內部自建一顆紅黑樹(一種非嚴格意義上的平衡二叉樹),這顆樹具有對數據自動排序的功能,所以在map內部所有的數據都是有序的
mymap.insert ( std::pair<char,int>('a',100) ); mymap.insert ( std::pair<char,int>('z',200) ); std::pair<std::map<char,int>::iterator,bool> ret; ret = mymap.insert ( std::pair<char,int>('z',500) );if(ret.second==false) { std::cout <<"element 'z' already existed"; std::cout <<" with a value of "<< ret.first->second <<'\n'; }
數據的查找(包括判定這個關鍵字是否在map中出現)
在這里我們將體會,map在數據插入時保證有序的好處。
要判定一個數據(關鍵字)是否在map中出現的方法比較多,這里標題雖然是數據的查找,在這里將穿插著大量的map基本用法。
這里給出三種數據查找方法
第一種:用count函數來判定關鍵字是否出現,其缺點是無法定位數據出現位置,由于map的特性,一對一的映射關系,就決定了count函數的返回值只有兩個,要么是0,要么是1,出現的情況,當然是返回1了
第二種:用find函數來定位數據出現位置,它返回的一個迭代器,當數據出現時,它返回數據所在位置的迭代器,如果map中沒有要查找的數據,它返回的迭代器等于end函數返回的迭代器。
數據的清空與判空
清空map中的數據可以用clear()函數,判定map中是否有數據可以用empty()函數,它返回true則說明是空map
數據的刪除
Map<int,string> mapStudent; mapStudent.insert(pair<int,string>(1,“student_one”)); mapStudent.insert(pair<int,string>(2,“student_two”)); mapStudent.insert(pair<int,string>(3,“student_three”)); //如果你要演示輸出效果,請選擇以下的一種,你看到的效果會比較好 //如果要刪除1,用迭代器刪除 map<int,string>::iterator iter; iter = mapStudent.find(1); mapStudent.erase(iter); //如果要刪除1,用關鍵字刪除 Int n = mapStudent.erase(1);//如果刪除了會返回1,否則返回0 //用迭代器,成片的刪除 //一下代碼把整個map清空 mapStudent.earse(mapStudent.begin(),mapStudent.end()); //成片刪除要注意的是,也是STL的特性,刪除區間是一個前閉后開的集合
注:
List特點:元素有放入順序,元素可重復
Set特點:元素無放入順序,元素不可重復(注意:元素雖然無放入順序,但是元素在set中的位置是有該元素的HashCode決定的,其位置其實是固定的)
Map特點:元素按鍵值對存儲,無放入順序 (應該知道什么是鍵值對吧!)
List接口有三個實現類:LinkedList,ArrayList,Vector
LinkedList:底層基于鏈表實現,鏈表內存是散亂的,每一個元素存儲本身內存地址的同時還存儲下一個元素的地址。鏈表增刪快,查找慢
ArrayList和Vector的區別:ArrayList是非線程安全的,效率高;Vector是基于線程安全的,效率低
Set接口有兩個實現類:HashSet(底層由HashMap實現),LinkedHashSet
SortedSet接口有一個實現類:TreeSet(底層由平衡二叉樹實現)
Query接口有一個實現類:LinkList
Map接口有三個實現類:HashMap,HashTable,LinkeHashMap
HashMap非線程安全,高效,支持null;HashTable線程安全,低效,不支持null
SortedMap有一個實現類:TreeMap
其實最主要的是,list是用來處理序列的,而set是用來處理集的。Map是知道的,存儲的是鍵值對
set 一般無序不重復.map kv 結構 list 有序。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。