unordered map版本相容問題

2021-07-01 19:42:47 字數 1602 閱讀 5701

在c++中最讓我蛋疼的事情之一就是unordered_map千呼萬喚才出來,在c++早期版本標準庫裡面只有map這個字典。 但是map的內部實現是採用的紅黑樹,眾所周知,對於字典這類結構也可以用hash表來實現,也就是c++的標準庫應該也要有hash_map這種資料結構。

在c++中關於map的hash表方法的實現是unordered_map這個資料結構,首次出現應該是在c

++98那個年代的tr1這個命名空間裡面出現。 使用方法寫起來比較囉嗦。

#include

using

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

#include

using

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...