c++无序容器
1、新標(biāo)準(zhǔn)定義了四個(gè)無(wú)序關(guān)聯(lián)容器,有序容器是用比較運(yùn)算符來(lái)組織元素的,而無(wú)序容器是使用一個(gè)哈希函數(shù)和關(guān)鍵字類(lèi)型的==運(yùn)算符,在關(guān)鍵字元素沒(méi)有明顯的序關(guān)系的情況下,無(wú)序容器是非常有用的,在某些應(yīng)用中,維護(hù)序代價(jià)非常高昂
2、除了哈希管理操作之外,無(wú)序容器提供了與有序容器相同的操作
3、無(wú)序容器在儲(chǔ)存上組織為一組桶,每個(gè)桶保存零個(gè)或多個(gè)元素,無(wú)序容器用一個(gè)哈希函數(shù)將元素映射到桶中。為了訪問(wèn)一個(gè)元素,容器首先計(jì)算元素的哈希值,它指出應(yīng)該搜索那個(gè)桶,容器將具有一個(gè)特定哈希值的所有元素保存在相同的桶中
4、理想情況下,哈希函數(shù)可以將每個(gè)特定的值映射到統(tǒng)一的桶中,但是也允許將不同關(guān)鍵字的元素映射到同一個(gè)桶。當(dāng)我們鎖定到一個(gè)有多個(gè)元素的桶時(shí),就需要順序搜索桶中的元素,由此來(lái)查找我們想要的那個(gè),此過(guò)程就需要大量比較操作
5、無(wú)序容器提供了一組管理桶的函數(shù),這些成員函數(shù)允許我們查詢?nèi)萜鞯臓顟B(tài)以及在必要時(shí)強(qiáng)制容器進(jìn)行重組
| 桶接口 | |
| c.bucket_count() | 正在使用的桶數(shù)目 |
| c.max_bucket_count() | 容器能容納的最多的桶的數(shù)量 |
| c.bucket_size(n) | 第n個(gè)桶中有多少個(gè)元素 |
| c.bucket(k) | 關(guān)鍵字為k的元素在哪個(gè)桶中 |
| 桶迭代 | |
| local_iterator | 可以用來(lái)訪問(wèn)桶中元素的迭代器類(lèi)型 |
| const_local_iterator | 桶迭代器的const版本 |
| c.begin(n), c.end(n) | 桶n的首元素迭代器和尾后迭代器 |
| c.cbegin(n), c.cend(n) | 與前兩個(gè)函數(shù)類(lèi)似,但返回const_local_iterator |
| 哈希策略 | |
| c.load_factor() | 每個(gè)桶的平均元素?cái)?shù)量,返回float值 |
| c.max_load_factor() | c試圖維護(hù)的平均桶大小,返回float值。c會(huì)在需要時(shí)添加新的桶,以使得load_factor<=max_load_factor |
| c.rehash(n) | 重組存儲(chǔ),使得bucket_count>=n且bucket_count>size/max_load_factor |
| c.reserve(n) | 重組存儲(chǔ),使得c可以保存n個(gè)元素且不必rehash |
?
總結(jié)
- 上一篇: 漫漫考研路
- 下一篇: riak文件服务器,riak简介(一)