c++98中,stl提供了底層為紅黑樹結構的一系列關聯式容器,在查詢時效率可達到log2(n),即最差情況下需要比較紅黑樹的高度次,當樹中的結點非常多時,查詢效率也不理想。最好的查詢是,進行很少的比較就能夠將元素找到,因此在c++11中,stl又提供了四個unordered系列的關聯式容器,這四個容器與紅黑樹結構的關聯式容器的使用方法基本相同,只是其底層結構不同,unordered系統的關聯式容器的底層結構是雜湊桶。看到英文不要慌,翻譯在下面(o(∩_∩)o哈哈~):
unordered_map是儲存鍵值對的關聯式容器,其允許通過keys快速的索引到與其對應的value。
在unordered_map中,鍵值通常用於唯一地標識元素,而對映值是乙個物件,其內容與此鍵關聯。鍵和對映值的型別可能不同。
在內部,unordered_map沒有對按照任何特定的順序排序,為了能在常數範圍內找到key所對應的value,unordered_map將相同雜湊值的鍵值對放在相同的桶中。
unordered_map容器通過key訪問單個元素要比map快,但它通常在遍歷元素子集的範圍迭代方面效率較低。
unordered_maps實現了直接訪問操作符(operator),它允許使用key作為引數直接訪問value。
它的迭代器只能是前向迭代器。
函式宣告
功能介紹
bool empty() const
檢測unordered_map是否為空
size_t size() const
獲取unordered_map的有效元素個數
函式宣告
功能介紹
begin()
返回unordered_map第乙個元素的迭代器
end()
返回unordered_map最後乙個元素下乙個位置的迭代器
cbegin()
返回unordered_map第乙個元素的const迭代器
cend()
返回unordered_map最後乙個元素下乙個位置的const迭代器
函式宣告
功能介紹
operator()
返回與key對應的value,沒有則返回預設值
注意:該函式中實際呼叫雜湊桶的插入操作,用引數key與v()構造乙個預設值往底層雜湊桶中插入,如果key不在雜湊桶中,插入成功,返回v();插入失敗,說明key已經在雜湊桶中,將key對應的value返回。
函式宣告
功能介紹
iterator find(const k& key)
返回key在雜湊桶中的位置
size_t count(const k& key)
返回雜湊桶中關鍵碼為key的鍵值對的個數
注意:unordered_map中可以是不能重複的,因此count函式的返回值最大為1。可以使用count介面判斷是否存在問題。
函式宣告
功能介紹
insert()
向容器中插入鍵值對
erase()
刪除容器中的鍵值對
void clear()
清空容器中有效元素個數
void swap(unordered_map&)
交換兩個容器中的元素
函式宣告
功能介紹
size_t bucket_count()const
返回雜湊桶中桶的總個數
size_t bucket_size(size_t n)const
返回n號同種有效元素的總個數
size_t bucket(const k& key)
返回元素key所在的桶號
這裡就不寫**演示了,和map/set/multimap/multiset的用法基本相同;另外可以參考官方文件。
unordered系列的其他三個容器介面類似,可以查閱官方文件,如下:
兩大類關聯式容器的區別:
C 容器 關聯式容器
由於multimap和map相差不大,所以基本以map做練習 集合 map 是一種包含已 排序 公升序 物件的關聯 容器。map multimap會根據待定的排序準則,自動將元素排序。兩者不同在於前者不允許元素重複,而後者允許。集合元素的第乙個引數是key,第二個元素當做value,元素的順序與ke...
C 關聯容器map的簡單使用
一 map容器的定義 map是stl的乙個關聯容器,它是乙個單對映容器。它提供一對一 其中第乙個可以稱為關鍵字,每個關鍵字只能在map 現一次,第二個可能稱為該關鍵字的值 的資料處理能力,由於這個特性,它完成有可能在我們處理一對一資料的時候,在程式設計上提供快速通道。這裡說下map內部資料的組織,m...
C 關聯式容器(set)詳解
關聯容器與序列容器有著根本性的不同,序列容器的元素是按照在容器中的位置來順序儲存和訪問的,而關聯容器的元素是按關鍵元素來儲存和訪問的。關聯容器支援高效的關鍵字查詢與訪問。兩個主要的關聯容器型別是map與set。概念 set裡面每個元素只存有乙個key,它支援高效的關鍵字查詢操作。set對應數學中的 ...