STL容器類map學習

2021-07-01 22:38:27 字數 1745 閱讀 3311

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容器學習 關聯容器與map的用法

stl提供了4個關聯容器 set multiset map和multimap。這些容器提供了通過keyword高速儲存和訪問資料元素的能力。set和map不同意有反覆keyword,而multiset和multimap同意反覆keyword。關聯容器的幾個共同函式例如以下 find key 搜尋容器...

STL關聯容器之map

map和set一樣,也是一種關聯容器,內部也是使用紅黑樹作為底層的實現結構。但是不同的是,map的鍵值和實值可以是不一樣的。map與set的查詢操作本質上是一樣的,沒有特殊的地方。map使用鍵值排列元素的位置,因而也不允許插入相同鍵值的元素,插入演算法返回pair iterator,bool 分別指...

STL容器 對map排序

stl容器 三 對map排序 對於map的排序問題,主要分為兩部分 根據key排序 根據value排序。下面我們就分別說一下 map預設按照key進行公升序排序 和輸入的順序無關。如果是int double等數值型為key,那麼就按照大小排列 如果是string型別,那麼就按照字串的字典序進行排列 ...