C++11新特性- 無序關(guān)聯(lián)容器
C++11之前的關(guān)聯(lián)容器
在C++11之前的關(guān)聯(lián)容器一共有四種。
首先是兩種最基本的類型:map和set。map中保存的是關(guān)鍵字-值的組合,而set中只保存關(guān)鍵字。
map和set中的關(guān)鍵字不允許重復(fù),一旦相同的關(guān)鍵字重新寫入,則原來的內(nèi)容被覆蓋。如果希望關(guān)鍵字可以重復(fù),可以使用multimap和multiset。
用圖表表示就是下面這樣。
由于這些關(guān)聯(lián)容器的存儲(chǔ)位置是根據(jù)比較運(yùn)算符決定的,所以也成為有序關(guān)聯(lián)容器。
無序關(guān)聯(lián)容器
C++11另外引入了4種無序關(guān)聯(lián)容器(unordered associative container)。這些容器將存儲(chǔ)組織為一組桶,根據(jù)哈希值將數(shù)據(jù)映射到桶。與有序關(guān)聯(lián)容器類似,無序關(guān)聯(lián)容器也可以用同樣的標(biāo)準(zhǔn)分類:
除了哈希管理操作以外,無序容器還提供了與有序容器相同的操作。也就是說有序容器和無序容器可以互換。
無序容器的優(yōu)勢(shì)
用一句話概括,就是通常情況下,無序容器通常會(huì)有更好的性能。下面用一段程序來確認(rèn)這個(gè)結(jié)論。
從實(shí)際的結(jié)果來看,使用無序關(guān)聯(lián)容器時(shí)的操作時(shí)間不到使用有序關(guān)聯(lián)容器時(shí)的一半。
作者觀點(diǎn)
除了提高親和力,提高效率也是C++努力的方向。