2011-05-05 80 views
1

可能重複:
how do you make a heterogeneous boost::map?C++地圖相同的密鑰類型和不同項目類型

這有可能在C的地圖+ +用相同類型的密鑰和不同類型的項目? 例如:

_______________________ 
| key | value | 
|===========|===========| 
| string | int  | 
|-----------|-----------| 
| string | char | 
|-----------|-----------| 
| string | vector | 
|-----------|-----------| 
| string | .... | 
+2

你怎麼知道你的密鑰引用了什麼類型的值?你可能可以用一堆鑄件和空洞做一些事情,但它看起來像一個*糟糕的主意...... – forsvarir 2011-05-05 14:40:12

+0

提出並回答:http://stackoverflow.com/q/251403/14065 – 2011-05-05 15:01:26

回答

6

是的,你可以存儲可變參數類型,如boost::any或(我的個人偏好,boost::variant

所以你的價值類型可以定義爲:

typedef boost::variant<int, char, ...> value_type; 

存儲比在map,然後一旦你提取值,使用訪問者的概念來處理。

+0

事實上,在這情況下,地圖值都具有相同的類型 - 「value_type」。 – 2011-05-05 14:46:18

+0

@unapersson:是的,但它確實解決了OP的問題:) – 2011-05-05 14:55:43

0

我不確定你爲什麼想要這樣做,但你可以使用map<std::string, boost::any>我相信。

你在做什麼真的試圖做什麼?