分類: 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內部自建一顆紅黑樹 一種非嚴格意義上...