關聯容器也是模板,在使用前必須指定資料型別。
標準庫提供8個關聯容器:
容器名關鍵字與值
元素是否可重複
排序方式
map成對存在
否從小到大
set兩者一體
否從小到大
multimap
成對存在
是從小到大
multiset
兩者一體
是從小到大
unordered_map
成對存在
否用雜湊函式組織
unordered_set
兩者一體
否用雜湊函式組織
unordered_multimap
成對存在
是用雜湊函式組織
unordered_multiset
兩者一體
是用雜湊函式組織
關聯容器multiset與set相比允許相同元素存在於容器中,其他方面與set相同。
關聯容器multiset應用例子:
#include
#include
intmain()
auto itr=mlset.
begin()
;for
(int i=
0;i1;i++
)//迭代到中位元素
itr++
;printf
("%d"
,*itr)
;
map可以看作是一種特殊的陣列,但其下標不必是整數,而是乙個關鍵字,使用關鍵字來訪問元素。
插入元素
map::insert();
當插入的元素的下標(map::first)已經存在時,該插入不會生效。
insert()將返回乙個pair, pair.first 為指向給定關鍵字的元素,pair.second是乙個bool值,表示插入是否生效。
案例4-1.6 樹種統計
#include
#include
#include
#include
intmain()
for(
const
auto
&tree : trees)
return
0;}
無序關聯容器使用雜湊函式(hash function)和關鍵字的==運算子來組織元素。在對排序無要求的情況下,使用無序關聯容器能夠提高程式的效率。
雜湊函式是一種類似於歸類的對映規則,將給定型別的值對映到整形值。相同的值必須對映到相同的整數。在未定義hash函式和==運算子時,無序關聯容器會使用預設函式和運算規則。可以通過下面的語句來重新定義hash函式和 ==運算子。可以只重新定義hash函式。
using..
.=unorder_multiset
decltype
(hasher)*,
decltype
(eqop)
*>;.
..name
(bucketnumber,hasher,eqop)
運用map庫建立關聯容器
原文出處 use the library to create associative containers 摘要 當索引是整型,那麼將值與之關聯並不難,但如果資料的關聯值對是其它資料型別怎麼辦呢?庫具備乙個關聯容器,使用它可以很方便地關聯所有型別的資料對。本文將討論 庫的使用方法和技巧。關聯式資料庫...
STL容器資料結構
資料結構 描述 實現標頭檔案 向量 vector 連續儲存的元素 列表 list 由節點組成的雙向鍊錶,每個結點包含著乙個元素 雙佇列 deque 連續儲存的指向不同元素的指標所組成的陣列 集合 set 由節點組成的紅黑樹,每個節點都包含著乙個元素,節點之間以某種作用於元素對的謂詞排列,沒有兩個不同...
redis資料結構運用場景
1 string 常用命令 set,get,decr,incr,mget 等。應用場景 string是最常用的一種資料型別,普通的key value儲存都可以歸為此類,這裡就不所做解釋了。實現方式 string在redis內部儲存預設就是乙個字串,被redisobject所引用,當遇到incr,de...