STL 關聯式容器 Set與Map的用法

2021-07-27 00:13:20 字數 2337 閱讀 2129

c++的標準模板庫(

簡稱stl)是乙個容器和演算法的類庫。容器往往包含同一型別的資料。

set是一種關聯式容器,其特性如下:

定義乙個元素為整數的集合a,可以用

seta;

基本操作:

對集合a中元素的有

插入元素:a.insert(1);

刪除元素(如果存在):a.erase(1);

判斷元素是否屬於集合:if (a.find(1) != a.end()) ...

返回集合元素的個數:a.size()

將集合清為空集:a.clear()

中序遍歷:類似vector遍歷(用迭代器)

反向遍歷:利用反向迭代器reverse_iterator:

sets;  set::reverse_iterator rit;  for(rit=s.rbegin();rit!=s.rend();rit++)

元素的刪除:s.erase(2);  s.clear();

元素的檢索:find(),若找到,返回該值迭代器的位置,否則返回最後乙個元素後面乙個位置s.end()

it=s.find(5); if(it==s.end()) cout<<"not find"<

map:一樣是關聯式容器,它們的底層容器都是紅黑樹,區別就在於map的值不作為鍵,鍵和值是分開的。它的特性如下:

在map中,乙個鍵對應乙個值,其中鍵不允許重複,不允許修改,但是鍵對應的值是可以修改的。

map基本操作:

資料的插入:

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

第一種:用insert函式插入pair資料

mapmapstudent;

mapstudent.insert(pair(1, 「student_one」));

第二種:用insert函式插入value_type資料

mapmapstudent;

mapstudent.insert(map::value_type (1, 「student_one」));

第三種:用陣列方式插入資料

mapmapstudent;

mapstudent[1] = 

「student_one」;

mapstudent[2] = 「student_two」;

在往map裡面插入了資料,我們怎麼知道當前已經插入了多少資料呢,可以用size函式:

int nsize = mapstudent.size();

資料的查詢(包括判定這個關鍵字是否在map中出現):

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

第一種:用count函式來判定關鍵字是否出現,但是無法定位資料出現位置

第二種:用find函式來定位資料出現位置它返回的乙個迭代器,

當資料出現時,它返回資料所在位置的迭代器,如果map中沒有要查詢的資料,它返回的迭代器等於end函式返回的迭代器

int main()

else

} cout<<」do not find」<

資料的遍歷:

第一種:應用前向迭代器

map::iterator iter;

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

cout」第二種:應用反相迭代器

map::reverse_iterator iter;

for(iter = mapstudent.rbegin(); iter != mapstudent.rend(); iter++)

cout」第三種:用陣列方式

int nsize = mapstudent.size()

for(int nindex = 1; nindex <= nsize; nindex++)

cout<

資料的清空與判空:

清空map中的資料可以用clear()函式,判定map中是否有資料可以用empty()函式,它返回true則說明是空map

7.  資料的刪除

這裡要用到erase函式,它有三個過載了的函式

迭代器刪除

iter = mapstudent.find(1);

mapstudent.erase(iter);

用關鍵字刪除

int n = mapstudent.erase(1);//如果刪除了會返回1,否則返回0

用迭代器,成片的刪除

一下**把整個map清空

mapstudent.earse(mapstudent.begin(), mapstudent.end());

//成片刪除要注意的是,也是stl的特性,刪除區間是乙個前閉後開的集合

8.  其他一些函式用法

STL關聯容器之map

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

關聯式容器 map

map的特性是,所有元素都會根據元素的鍵值自動被排序。map的所有元素的型別都是pair,而map的底層就是一顆紅黑樹。它不同set的是,它既有是鍵值 key 排序根據key排序,鍵值保持唯一性,它還具有實值 value pair既pair的first為key,second為value。我們不能修改...

STL中的關聯式容器 map(對映)

map,即 對映 map是關聯容器的一種,具體實現採用了紅黑樹的平衡二叉樹的資料結構。它提供一對一 其中第乙個稱為關鍵字key,每個關鍵字只能在map 現一次,第二個稱為該關鍵字的值value 的資料處理能力,由於這個特性,它完成有可能在我們處理一對一資料的時候,在程式設計上提供快速通道。由於是利用...