資料結構 關聯容器運用

2021-10-23 03:10:15 字數 1658 閱讀 8493

關聯容器也是模板,在使用前必須指定資料型別。

標準庫提供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...