pair是一種簡單的關聯型別,不屬於容器範圍。而是代表乙個 key-value鍵值對。建立、初始化、操作 示例**如下:
#include #include #include using namespace std;
//將pair放入容器&initpair
int main(int argc, const char *ar**)
return 0;
}
map是stl的乙個關聯容器,它提供一對一(其中第乙個可以稱為關鍵字,每個關鍵字只能在map**現一次,第二個可能稱為該關鍵字的值)的資料 處理能力,由於這個特性,它完成有可能在我們處理一對一資料的時候,在程式設計上提供快速通道。這裡說下map內部資料的組織,map內部自建一顆紅黑樹(一 種非嚴格意義上的平衡二叉樹),這顆樹具有對資料自動排序的功能,所以在map內部所有的資料都是有序的,後邊我們會見識到有序的好處。1、
map簡介
map是一類關聯式容器。它的特點是增加和刪除節點對迭代器的影響很小,除了那個操作節點,對其他的節點都沒有什麼影響。對於迭代器來說,可以修改實值,而不能修改key。2、
map的功能
自動建立key - value的對應。key 和 value可以是任意你需要的型別。
根據key值快速查詢記錄,查詢的複雜度基本是log(n),如果有1000個記錄,最多查詢10次,1,000,000個記錄,最多查詢20次。
快速插入key -value 記錄。
快速刪除記錄
根據key 修改value記錄。
遍歷所有記錄。
3、使用
map
使用map得包含map類所在的標頭檔案
#include //注意,stl標頭檔案沒有副檔名.h
map物件是模板類,需要關鍵字和儲存物件兩個模板引數:
std:map<int,string> personnel;
這樣就定義了乙個用int作為索引,並擁有相關聯的指向string的指標.
為了使用方便,可以對模板類進行一下型別定義,
typedefmap<int,cstring> udt_map_int_cstring;
udt_map_int_cstring enummap;
1):map則是乙個容器,裡面儲存的是 pair物件。但儲存的方式與vector這種 連續儲存有所不同, map採用的是 二叉排序樹儲存pair,一般是紅黑樹。
2):map使用下標訪問時,如果 key不存在,那麼會在map 中自動新增乙個新的pair,value為預設值。
效能分析:由於map採用二叉排序樹(紅黑樹),樹的高度不超過 [logn] +1。所以 插入和查詢時間複雜度 為 o(lgn);
注意:使用insert插入map元素時,如果失敗,則不會更新原來的值。
4、map的建構函式
map共提供了6個建構函式,這塊涉及到記憶體分配器這些東西,略過不表,在下面我們將接觸到一些map的構造方法,這裡要說下的就是,我們通常用如下方法構造乙個map:
mapmapstudent;
5、 資料的插入
在構造map容器後,我們就可以往裡面插入資料了。這裡講三種插入資料的方法:
第一種:用insert函式插入pair資料,下面舉例說明(以下**雖然是隨手寫的,應該可以在vc和gcc下編譯通過,大家可以執行下看什麼效果,在vc下**入這條語句,遮蔽4786警告 #pragma warning (disable:4786) )
//資料的插入--第一種:用insert函式插入pair資料
#include #include #include usingnamespace std;
int main()
」switch(ways)
//如果要刪除1,用關鍵字刪除
case1:
case2:
default:cout<<"shenemeyebuqingchu"<::iterator it;
for(it =mapstudent.begin();it !=mapstudent.end();++it)
}studentinfo, *pstudentinfo; //學生資訊
int main()
studentinfo, *pstudentinfo; //學生資訊
class sort
};
int main()
setset2(ivec.begin(), ivec.end());
for(set_it = set2.begin(); set_it != set2.end(); set_it++)
printf("\n");
1.1 在set中新增元素
vectorivec2;
for(vector::size_type i = 10; i < 20; i++)
set2.insert(0);//單個的插入
set2.insert(ivec2.begin(), ivec2.end());//範圍插入
for(set_it = set2.begin(); set_it != set2.end(); set_it++)
printf("\n");
1.2從set中獲取元素
set2.find(1); //returns iterator that refers to the element whit key == 1
set2.find(21); //returns iterator == set2.end()
set2.count(1); //returns 1
set2.count(21); // returns 0
set和map在遍歷,排序效率上都是一樣的,其內部都是紅黑樹作為資料結構.唯一的差別在於set要求容器內元素自帶《符號,或者給定外部小於判斷式.map則僅僅要求key可排序.雖然說hash檢索的效率更高,但是set和map的很多操作會涉及到排序,因此可能是這個原因使得作者們決定用紅黑樹而不是hash結構。
C 關聯容器之map
認識map map型別通常被稱為關聯陣列,關聯陣列與 正常 陣列類似,不同之處在於其下標不必是整數。map是標準的關聯式容器,乙個map是乙個鍵值對序列,即 key,value 對。它提供基於key的快速檢索能力。map中key值是唯一的。集合中的元素按一定的順序排列。元素插入過程是按排序規則插入,...
c 之關聯容器map
map是關鍵字 值對的集合,元素是一些關鍵字 值對 字典 按關鍵字有序儲存元素 標頭檔案 include建立map mapm 建立乙個map,關鍵字為tk型別,值為tv型別 mapm1 建立乙個map,關鍵字為tk型別,值為tv型別,新增元素key value新增元素 mapm 建立乙個map,關鍵...
c 之關聯容器 map
關聯容器支援高效的關鍵字查詢和訪問,兩個主要的關聯容器 map和set。map中的元素是 關鍵字 值 對 key value 關鍵字起索引作用。set中只包含乙個關鍵字。預設set是 無重複元素 有序儲存的。除非加上unordered multi修飾。map定義及初始化 mapword count ...