map 詳細用法(常看看哦)

2021-07-10 12:23:15 字數 1756 閱讀 2996

map是stl的乙個關聯容器,它提供一對一(其中第乙個可以稱為關鍵字,每個關鍵字只能在map中出現一次,第二個可能稱為該關鍵字的值)的資料處理能力,由於這個特性,它完成有可能在我們處理一對一資料的時候,在程式設計上提供快速通道。這裡說下map內部資料的組織,map內部自建一顆紅黑樹(一種非嚴格意義上的平衡二叉樹),這顆樹具有對資料自動排序的功能,所以在map內部所有的資料都是有序的,後邊我們會見識到有序的好處。

下面舉例說明什麼是一對一的資料對映。比如乙個班級中,每個學生的學號跟他的姓名就存在著一一對映的關係,這個模型用map可能輕易描述,很明顯學號用int描述,姓名用字串描述(本篇文章中不用char *來描述字串,而是採用stl中string來描述),下面給出map描述**:

[cpp] view plaincopy

map

#include 

#include

#include

using

namespace

std;

int main()

8.其他一些函式用法

這裡有swap,key_comp,value_comp,get_allocator等函式,感覺到這些函式在程式設計用的不是很多,略過不表,有興趣的話可以自個研究

9.排序

這裡要講的是一點比較高深的用法了,排序問題,stl中預設是採用小於號來排序的,以上**在排序上是不存在任何問題的,因為上面的關鍵字是int型,它本身支援小於號運算,在一些特殊情況,比如關鍵字是乙個結構體,涉及到排序就會出現問題,因為它沒有小於號操作,insert等函式在編譯的時候過不去,下面給出兩個方法解決這個問題

第一種:小於號過載,程式舉例

#include 

#include

uing namespace

std;

typedef struct tagstudentinfo

studentinfo, *pstudentinfo; //學生資訊

int main()

}studentinfo, *pstudentinfo; //學生資訊

第二種:仿函式的應用,這個時候結構體中沒有直接的小於號過載,程式說明

[cpp] view plaincopy

#include

#include

using

namespace

std;

typedef struct tagstudentinfo

studentinfo, *pstudentinfo; //學生資訊

class sort

};

int main()

10.另外

由於stl是乙個統一的整體,map的很多用法都和stl中其它的東西結合在一起,比如在排序上,這裡預設用的是小於號,即less<>,如果要從大到小排序呢,這裡涉及到的東西很多,在此無法一一加以說明。

還要說明的是,map中由於它內部有序,由紅黑樹保證,因此很多函式執行的時間複雜度都是log2n的,如果用map函式可以實現的功能,而stl algorithm也可以完成該功能,建議用map自帶函式,效率高一些。

下面說下,map在空間上的特性,否則,估計你用起來會有時候表現的比較鬱悶,由於map的每個資料對應紅黑樹上的乙個節點,這個節點在不儲存你的資料時,是占用16個位元組的,乙個父節點指標,左右孩子指標,還有乙個列舉值(標示紅黑的,相當於平衡二叉樹中的平衡因子),我想大家應該知道,這些地方很費記憶體了。

Map集合詳細解析

找效能,提供優秀的使用者體驗 map 的使用 特點 put 將被查詢的資料成對的新增到map中,其中key是被檢索的關鍵字,value是檢索到的結果 map map newhashmap map.put 莫言 檀香刑 map.put 三十 我空姐同居的日子 map.put 馮唐 18歲給我乙個姑娘 ...

map基本用法

目錄引言 1.map簡介 2.map的功能 3.使用map 4.map的建構函式 5.map的大小 6.map的基本操作函式 map是stl的乙個關聯容器,它提供一對一 其中第乙個可以稱為關鍵字,每個關鍵字只能在map中出現一次,第二個可能稱為該關鍵字的值 的資料 處理能力,由於這個特性,它完成有可...

map用法詳解

迭代器用法 mapm 第乙個為鍵,第二個為值 for int i 10 i 0 i 這裡是按從大到小的順序,但是迭代器是按從小到大的順序輸出 if i 2 0 因為map自帶按鍵從小到大排序 m i 1 map iterator iter for iter m.begin iter m.end it...