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