C 程式設計基礎 關聯容器(map)

2021-09-18 06:10:09 字數 3138 閱讀 8072

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 ...