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 personnel;
這樣就定義了乙個用int作為索引,並擁有相關聯的指向string的指標.
為了使用方便,可以對模板類進行一下型別定義,
typedef map udt_map_int_cstring;
udt_map_int_cstring enummap;
4、 map的建構函式
map共提供了6個建構函式,這塊涉及到記憶體分配器這些東西,略過不表,在下面我們將接觸到一些map的構造方法,這裡要說下的就是,我們通常用如下方法構造乙個map:
mapmapstudent;
5、 資料的插入
在構造map容器後,我們就可以往裡面插入資料了。這裡講三種插入資料的方法:
第一種:用insert函式插入pair資料,下面舉例說明(以下**雖然是隨手寫的,應該可以在vc和gcc下編譯通過,大家可以執行下看什麼效果,在vc下**入這條語句,遮蔽4786警告 #pragma warning (disable:4786) )
[cpp]
view plain
copy
//資料的插入--第一種:用insert函式插入pair資料
#include
#include
#include
using namespace std;
int main()
第二種:用insert函式插入value_type資料,下面舉例說明
[cpp]
view plain
copy
//第二種:用insert函式插入value_type資料,下面舉例說明
#include
#include
#include
using namespace std;
int main()
第三種:用陣列方式插入資料,下面舉例說明
[cpp]
view plain
copy
//第三種:用陣列方式插入資料,下面舉例說明
#include
#include
#include
using namespace std;
int main()
以上三種用法,雖然都可以實現資料的插入,但是它們是有區別的,當然了第一種和第二種在效果上是完成一樣的,用insert函式插入資料,在資料的 插入上涉及到集合的唯一性這個概念,即當map中有這個關鍵字時,insert操作是插入資料不了的,但是用陣列方式就不同了,它可以覆蓋以前該關鍵字對 應的值,用程式說明
mapstudent.insert(map::value_type (1, "student_one"));
mapstudent.insert(map::value_type (1, "student_two"));
上面這兩條語句執行後,map中1這個關鍵字對應的值是「student_one」,第二條語句並沒有生效,那麼這就涉及到我們怎麼知道insert語句是否插入成功的問題了,可以用pair來獲得是否插入成功,程式如下
pair::iterator, bool> insert_pair;
insert_pair = mapstudent.insert(map::value_type (1, "student_one"));
我們通過pair的第二個變數來知道是否插入成功,它的第乙個變數返回的是乙個map的迭代器,如果插入成功的話insert_pair.second應該是true的,否則為false。
c 中map常見用法說明
c 中map提供的是一種鍵值對容器,每一對中的第乙個值稱之為關鍵字 key 每個關鍵字只能在map 現一次 第二個稱之為該關鍵字的對應值。標頭檔案 include map int,string id name 使用 賦值是從c 11開始的,因此編譯器版本過低時會報錯,如visual studio 2...
C 的Map常見用法總結
map是stl的非常重要的關聯容器,其底層由紅黑樹實現,是一種key value的模式。標頭檔案和定義 include typedef mapmy map 第一種定義方式 模板定義 my map mmap 這兩種定義方法均可 mapmap 第二種定義方式 直接定義 迭代器和遍歷 map iterat...
c 中map的用法
map是c 的乙個標準容器,她提供了很好一對一的關係,在一些程式中建立乙個map可以起到事半功倍的效果,總結了一些map基本簡單實用的操作!1.map最基本的建構函式 mapmapstring mapmapint mapmapstring map char string mapchar mapmap...