STL中map用法詳解

2021-06-21 05:05:23 字數 3643 閱讀 5341

分類: stl文件

linux系統管理、核心、程式設計

2006-12-23 15:49

42682人閱讀

收藏舉報

string

iterator

iostream

insert

pair

struct

map是stl

的乙個關聯容器,它提供一對一(其中第乙個可以稱為關鍵字,每個關鍵字只能在

map中出現一次,第二個可能稱為該關鍵字的值)的資料處理能力,由於這個特性,它完成有可能在我們處理一對一資料的時候,在程式設計上提供快速通道。這裡說下

map內部資料的組織,

map內部自建一顆紅黑樹

(一種非嚴格意義上的平衡二叉樹

),這顆樹具有對資料自動排序的功能,所以在

map內部所有的資料都是有序的,後邊我們會見識到有序的好處。

下面舉例說明什麼是一對一的資料對映。比如乙個班級中,每個學生的學號跟他的姓名就存在著一一對映的關係,這個模型用

map可能輕易描述,很明顯學號用

int描述,姓名用字串描述

(本篇文章中不用

char *

來描述字串,而是採用

stl中

string

來描述),

下面給出

map描述**:

mapmapstudent;

1.map的建構函式

map共提供了

6個建構函式,這塊涉及到記憶體分配器這些東西,略過不表,在下面我們將接觸到一些

map的構造方法,這裡要說下的就是,我們通常用如下方法構造乙個

map:

mapmapstudent;

2.資料的插入

在構造map

容器後,我們就可以往裡面插入資料了。這裡講三種插入資料的方法:

第一種:用

insert

函式插入

pair

資料,下面舉例說明

(以下**雖然是隨手寫的,應該可以在vc和

gcc下編譯通過,大家可以執行下看什麼效果,在

vc下**入這條語句,遮蔽

4786警告#

pragma warning (disable:4786) )

#include

#include

#include

using namespace std;

int main()

}第二種:用

insert

函式插入

value_type

資料,下面舉例說明

#include

#include

#include

using namespace std;

int main()

}第三種:用陣列方式插入資料,下面舉例說明

#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

。下面給出完成**,演示插入成功與否問題

#include

#include

#include

using namespace std;

int main()

else

insert_pair

=mapstudent.insert(pair(1, 「student_two」));

if(insert_pair.second == true)

else

map::iterator  iter;

for(iter = mapstudent.begin(); iter != mapstudent.end(); iter++)

}大家可以用如下程式,看下用陣列插入在資料覆蓋上的效果

#include

#include

#include

using namespace std;

int main() }3.

map的大小

在往map

裡面插入了資料,我們怎麼知道當前已經插入了多少資料呢,可以用

size

函式,用法如下:

int nsize = mapstudent.size();

4.資料的遍歷

這裡也提供三種方法,對

map進行遍歷

第一種:應用前向迭代器,上面舉例程式中到處都是了,略過不表

第二種:應用反相迭代器,下面舉例說明,要體會效果,請自個動手執行程式

#include

#include

#include

using namespace std;

int main()

}第三種:用陣列方式,程式說明如下

#include

#include

#include

using namespace std;

int main() }5.

資料的查詢(包括判定這個關鍵字是否在

map中出現)

在這裡我們將體會,

map在資料插入時保證有序的好處。

要判定乙個資料(關鍵字)是否在

map中出現的方法比較多,這裡標題雖然是資料的查詢,在這裡將穿插著大量的

map基本用法。

這裡給出三種資料查詢方法

第一種:用

count

函式來判定關鍵字是否出現,其缺點是無法定位資料出現位置,由於

map的特性,一對一的對映關係,就決定了

count

函式的返回值只有兩個,要麼是

0,要麼是

1,出現的情況,當然是返回

STL中map用法詳解

map是stl的乙個關聯容器,它提供一對一 其中第乙個可以稱為關鍵字,每個關鍵字只能在 map中出現一次,第二個可能稱為該關鍵字的值 的資料處理能力,由於這個特性,它完成有可能在我們處理一對一資料的時候,在程式設計上提供快速通道。這裡說 下map內部資料的組織,map內部自建一顆紅黑樹 一種非嚴格意...

STL中map用法詳解

說明 如果你具備一定的c template知識,即使你沒有接觸過stl,這個文章你也應該可能較輕易的看懂。本人水平有限,不當之處,望大家輔正。一 map概述 map是stl的乙個關聯容器,它提供一對一 其中第乙個可以稱為關鍵字,每個關鍵字只能在map中出現一次,第二個可能稱為該關鍵字的值 的資料處理...

STL中map用法詳解

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