map類定義了乙個關聯容器,並且在容器中使用唯一的關鍵字(任何兩個元素的鍵都不相同)來對映相應的值。從本質上來說,關鍵字就是值的名字。在map物件中儲存了乙個值之後,就可以通過關鍵字來獲得它。map物件是一系列關鍵字/值的匹配對。
map的主要功能在於:只有你知道了乙個值的關鍵字,就能夠找到這個值。例如,定義乙個map物件m,在該物件中使用人名作為關鍵字,並將每個人的**號碼儲存為值。那麼可以使用m[「張三」]表示張三的**號碼。從前面的例子可以看出map類有乙個非常優越的特點:關聯陣列。在普通的陣列中,索引是乙個整數。而在關聯陣列中,索引是乙個鍵,並且鍵可以是任意型別的,可以是string、double、int型別,甚至可以是一些使用者定義的類。
map和set的插入刪除效率比用其他序列容器高,因為對於關聯容器來說,不需要做記憶體拷貝和記憶體移動。map和set容器內所有元素都是以節點的方式來儲存,其節點結構和鍊錶差不多,指向父節點和子節點。結構圖可能如下:
a/ /
b c
/ / / /
d e f g
因此插入的時候只需要稍做變換,把節點的指標指向新的節點就可以了。刪除的時候類似,稍做變換後把指向刪除節點的指標指向其他節點就ok了。這裡的一切操作就是指標換來換去,和記憶體移動沒有關係。
每次insert之後,以前儲存的iterator不會失效,因為iterator是指向節點的指標,記憶體沒有變,指向記憶體的指標當然不會失效。
函式列表如下:
begin() 返回指向map頭部的迭代器
clear() 刪除所有元素
count() 返回指定元素出現的次數
empty() 如果map為空則返回true
end() 返回指向map末尾的迭代器
equal_range() 返回特殊條目的迭代器對
erase() 刪除乙個元素
find() 查詢乙個元素
get_allocator() 返回map的配置器
insert() 插入元素
key_comp() 返回比較元素key的函式
lower_bound() 返回鍵值》=給定元素的第乙個位置
max_size() 返回可以容納的最大元素個數
rbegin() 返回乙個指向map尾部的逆向迭代器
rend() 返回乙個指向map頭部的逆向迭代器
size() 返回map中元素的個數
swap() 交換兩個map
upper_bound() 返回鍵值》給定元素的第乙個位置
value_comp() 返回比較元素value的函式
示例:#include
#include
#include
#include
using namespace std;
void main()
{mapm,n;
string key;int value;
value=1;key="a12";
m[key]=value;
value=5;key="a3";
m[key]=value;
m["d5"]=4;
m["a2"]=5;
map::iterator p=m.begin();//定義m物件的迭代器,並輸出m中所有項
p++;p++;
m.insert(p,pair("a1",7));
m["b6"]=3;
p=m.begin();
for (int i=0; ifirst <<" " stl提供了4個關聯容器 set multiset map和multimap。這些容器提供了通過keyword高速儲存和訪問資料元素的能力。set和map不同意有反覆keyword,而multiset和multimap同意反覆keyword。關聯容器的幾個共同函式例如以下 find key 搜尋容器... map和set一樣,也是一種關聯容器,內部也是使用紅黑樹作為底層的實現結構。但是不同的是,map的鍵值和實值可以是不一樣的。map與set的查詢操作本質上是一樣的,沒有特殊的地方。map使用鍵值排列元素的位置,因而也不允許插入相同鍵值的元素,插入演算法返回pair iterator,bool 分別指... stl容器 三 對map排序 對於map的排序問題,主要分為兩部分 根據key排序 根據value排序。下面我們就分別說一下 map預設按照key進行公升序排序 和輸入的順序無關。如果是int double等數值型為key,那麼就按照大小排列 如果是string型別,那麼就按照字串的字典序進行排列 ...STL容器學習 關聯容器與map的用法
STL關聯容器之map
STL容器 對map排序