在c++中最讓我蛋疼的事情之一就是unordered_map
千呼萬喚才出來,在c++早期版本標準庫裡面只有map
這個字典。 但是map
的內部實現是採用的紅黑樹,眾所周知,對於字典這類結構也可以用hash表來實現,也就是c++的標準庫應該也要有hash_map
這種資料結構。
在c++中關於map的hash表方法的實現是unordered_map
這個資料結構,首次出現應該是在c
++98那個年代的tr1
這個命名空間裡面出現。 使用方法寫起來比較囉嗦。
#includeusing
std::
tr1::
unordered_map
;
我認為像unordered_map
這個資料結構差不多就是c++程式設計師的柴公尺油鹽,生活必需品。 但是由於c++標準委員會的懶散,硬生生是拖到c
++0x/c
++11標準才把unordered_map
納入std標準。 也就是只有在支援-
std=c++
0x甚至-
std=c++
11的編譯器裡(對於g++來說大概是g
++4.4這個版本以上的才開始支援),才可以用如下**使用unordered_map
:
#includeusing
std::
unordered_map
;
假設如果全世界所有的g++都已經是4.4版本以上了,那使用unordered_map
就不再有任何問題,但是現實是殘酷的,總會在世界某些角落的伺服器, 仍然在使用g
++-4.1
.x,而且對於這些伺服器來說公升級g++還麻煩得很。所有我們的程式就要考慮對於低階版本的相容。
#if(__cplusplus == 201103l)#include
#include
#else
#include
#include
namespace
std#endif
這個解決方法主要是依靠__cplusplus
這個巨集在不同c++版本中的值不同。 對於(能夠使用且)使用了-
std=c++
0x或者-
std=c++
11編譯選項的編譯過程,__cplusplus
的值是201103l
,否則則是其他值。
上述方法最低大概只能支援到c++98這個標準了,因為到了c++98才開始有tr1
/unordered_map,所以你的編譯器如果連c
++98都不支援的話,那就乖乖用遠古時代流傳至今的map
吧。
librdkafka和Broker版本相容
摘自 自從發布了0.8.0.0.0版本之後,librdkafka支援所有的發布版本的apache kafka broker,但不是所有的語法屬性都能被broker接受,因為 一些語法特性依賴於broker的具體實現 當前的預設配置 api.version.request true broker.ve...
tomcat安裝與myclipse版本相容
當電腦安裝有32位的myecliplse,那麼就要安裝32位的tomcat,一般來說,這兩個都安裝32位的比較保險 tomcat是免安裝的,所以在解壓後,只需要把tomcat檔案放在自己的路徑下,然後配置環境變數即可 那麼接下來就是我們今天的重頭戲,配置環境變數 首先定義三個環境變數,tomcat ...
selenium與firefox版本不相容
報錯資訊 org.openqa.selenium.firefox.notconnectedexception unable to connect to host 127.0.0.1 on port 7055 after 45000 ms 下圖說明geckodriver 15.0的版本要求seleni...