C++中的哈希容器unordered_map使用示例
隨著C++0x標(biāo)準(zhǔn)的確立,C++的標(biāo)準(zhǔn)庫中也終于有了hash table這個(gè)東西。
很久以來,STL中都只提供<map>作為存放對應(yīng)關(guān)系的容器,內(nèi)部通常用紅黑樹實(shí)現(xiàn),據(jù)說原因是二叉平衡樹(如紅黑樹)的各種操作,插入、刪除、查找等,都是穩(wěn)定的時(shí)間復(fù)雜度,即O(log n);但是對于hash表來說,由于無法避免re-hash所帶來的性能問題,即使大多數(shù)情況下hash表的性能非常好,但是re-hash所帶來的不穩(wěn)定性在當(dāng)時(shí)是不能容忍的。
不過由于hash表的性能優(yōu)勢,它的使用面還是很廣的,于是第三方的類庫基本都提供了支持,比如MSVC中的<hash_map>和Boost中的<boost/unordered_map.hpp>。后來Boost的unordered_map被吸納進(jìn)了TR1 (C++ Technical Report 1),然后在C++0x中被最終定了標(biāo)準(zhǔn)。
于是我們現(xiàn)在就可以開心得寫以下的代碼了:
#include <iostream>
#include <string>
#include <unordered_map>
int main()
{
std::unordered_map<std::string, int> months;
months["january"] = 31;
months["february"] = 28;
months["march"] = 31;
months["april"] = 30;
months["may"] = 31;
months["june"] = 30;
months["july"] = 31;
months["august"] = 31;
months["september"] = 30;
months["october"] = 31;
months["november"] = 30;
months["december"] = 31;
std::cout << "september -> " << months["september"] << std::endl;
std::cout << "april -> " << months["april"] << std::endl;
std::cout << "december -> " << months["december"] << std::endl;
std::cout << "february -> " << months["february"] << std::endl;
return 0;
}
相關(guān)文章
C語言數(shù)據(jù)結(jié)構(gòu)之迷宮問題
這篇文章主要為大家詳細(xì)介紹了C語言數(shù)據(jù)結(jié)構(gòu)之迷宮問題,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-03-03
C語言實(shí)現(xiàn)基于最大堆和最小堆的堆排序算法示例
這篇文章主要介紹了C語言實(shí)現(xiàn)基于最大堆和最小堆的堆排序算法示例,分別是基于最大堆的升序排序和基于最小堆的降序排序?qū)嵗?需要的朋友可以參考下2016-06-06
c++實(shí)現(xiàn)發(fā)送http請求通過get方式獲取網(wǎng)頁源代碼
這篇文章主要介紹了c++實(shí)現(xiàn)發(fā)送http請求,通過get方式獲取網(wǎng)頁源代碼的示例,需要的朋友可以參考下2014-02-02
C語言實(shí)現(xiàn)基于控制臺的電子時(shí)鐘
這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)基于控制臺的電子時(shí)鐘,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05

