6 關聯容器

2021-07-11 16:37:23 字數 2238 閱讀 3158

正文:set容器是stl中的關聯容器,是基於紅黑樹的。

需要包含標頭檔案:

#include

set、multiset都是集合類,差別在與set中不允許有重複元素,multiset中允許有重複元素。

set作為乙個容器也是用來儲存同一資料型別的資料型別,並且能從乙個資料集合中取出資料,在set中每個元素的值都唯一,而且系統能根據元素的值自動進行排序。set是單純的鍵的集合。set不支援下標操作

自動排序的優點是使得搜尋元素時具有良好的效能,具有對數時間複雜度。但是造成的乙個缺點就是:

不能直接改變元素值。因為這樣會打亂原有的順序。

改變元素值的方法是:先刪除舊元素,再插入新元素。

訪問元素只能通過迭代器,從迭代器的角度看,元素值是常數。

set的基本操作:

begin()  

返回指向第乙個元素的迭代器

clear()  

清除所有元素

count()  

返回某個值元素的個數,只返回0或1

empty()  

如果集合為空,返回true

end()  

返回指向最後乙個元素的迭代器

erase()  

刪除集合中的元素

find()  

返回乙個指向被查詢到元素的迭代器

insert()  

在集合中插入元素,與map容器一樣,帶有乙個鍵引數的insert返回pair型別,包含乙個迭代器和乙個bool型別,使用迭代器對的insert返回void型別

max_size()  

返回集合能容納的元素的最大限值

size()  

集合中元素的數目

swap()  

交換兩個集合變數

set:以op為排序法則的set

set:以less<>為排序法則的set

set<

int>

s1;建立乙個空的set,元素型別為int

s1.insert(10);插入10

s1.erase(s1.begin());刪除特定元素

s1.erase(10);刪除10

set容器的insert介面(鍵引數版本)返回的是乙個pair,而multiset容器的insert介面直接返回乙個iterator。這是因為set容器中不允許有重複的元素,如果容器中已經存在乙個跟插入值相同的元素,那麼插入操作就會失敗,而pair中的bool值就是標識插入是否成功的。而multiset不存在這個問題。

二、map

map是鍵-值對的集合,可使用鍵作為下標來獲取乙個值。mapm;//建立乙個名為m的空map物件,鍵和值得型別分別為k和v。

map內部自建一顆紅黑樹,這棵樹對資料具有自動排序的功能。(鍵:嚴格弱排序)??

使用map時,必須包含標頭檔案#include。

1.插入元素

(1)用陣列方式插入

mapword_count;//空map

word_count["anna"]=1;//在word_count中查詢鍵為anna的元素,沒找到則插入乙個鍵為anna的元素

map下標操作返回的左值是特定鍵所關聯的值

(2)insert

word_count.insert(pair("liming",1));//用insert函式插入pair資料

word_count.insert(map::value_type("leila",1));//用insert函式插入value_type資料

2.查詢元素

count和find,用於檢測某個鍵是否存在而不會插入該鍵

m.count(k);//返回m中k的出現次數,map只允許乙個鍵對應乙個例項,故返回值只能是0或1

m.find(k);//如果m中存在k索引的元素,則返回指向該元素的迭代器,否則返回超出末端迭代器

3.刪除元素

map容器的erase操作返回void,而順序容器的erase操作返回乙個指向被刪除元素後面的元素的迭代器。

m.erase(k);//刪除m中鍵為k的元素,返回size_type型別的值,表示刪除的元素個數

m.erase(p);//從m中刪除迭代器p所指向的元素,p必須指向m中確實存在的元素,而且不能等於m.end()。返回void型別

m.erase(b,e);//從m中刪除迭代器b和e範圍內的元素

4.map迭代器

map::const_iterator map_it=word_count.begin();

在使用迭代器遍歷map容器時,迭代器指向的元素按鍵的公升序排列。

容器 順序容器 關聯容器

容器分為 順序容器 關聯容器,示意圖如下 順序容器 只儲存值,關聯容器 key value形式,關聯容器的乙個元素包含兩個部分 鍵值對 key value 有序容器 底層實現為紅黑樹,即容器內的key是有序的 無序容器 底層實現為hash table,雜湊表 區別 順序容器通過元素在容器中的位置順序...

STL 關聯容器

1 關聯容器與順序容器的本質區別 關聯容器通過鍵 key 儲存和讀取元素,而順序容器則通過元素在容器中的位置順序儲存和訪問元素。2 關聯容器的型別 map set multimap multiset 3 pair型別 pair型別的比較 p1 p1 p2 如果兩個pair物件的first和secon...

c 關聯容器

1.map建構函式 mapm 普通初始化 mapm m2 複製初始化法 mapm b,e 另乙個map物件的迭代器初始化法 注意 1 鍵值型別必須定義 操作符號,資料訪問時需要呼叫。2 m aaa 下表訪問方式導致的結果是,若鍵對應的值不存在,則插入該鍵值對應的預設值。2.map插入操作 m.ins...