2011-06-11 75 views
2

我是新的C++和最近我發現,我們可以通過下面的代碼初始化字符串的集合:C++異構字典

map <string,string> myArray; 
myArray["key1"] = "value1"; 
myArray["key2"] = "value2"; 

cout<<myArray["key1"]<<endl; //result: value1 

但如果我必須分配給key2不一個字符串但另一個集合?這裏是我想它看起來:

map <string, ???another map???> myArray; 

map<string,string> secondArray; 
secondArray["foo"] = "bar"; 

myArray["key1"] = "value1"; 
myArray["key2"] = secondArray; 

cout<<myArray["key2"]["foo"]<<endl; //expected result: bar 

這可能嗎?

+3

地圖不是數組。 – 2011-06-11 19:26:50

+0

@Cat Maps是關聯數組嗎? – 2011-06-11 19:28:45

+0

@ anirudh4444它們是關聯數組,但術語* array *本身通常與恆定時間元素訪問關聯。 – Oswald 2011-06-11 19:33:14

回答

1

由於提問者似乎已經接受了答案之一,這只是一個 補充。
如果允許BoostBoost.Variant可能符合目的。
例如,以下代碼按問題打印bar

#include <boost/variant.hpp> 
#include <map> 
#include <string> 
#include <iostream> 

int main() { 
    using namespace std; 
    using namespace boost; 
    typedef map<string,string> map_t; 
    map <string, variant<string, map_t> > myArray; 

    map_t secondArray; 
    secondArray["foo"] = "bar"; 

    myArray["key1"] = "value1"; 
    myArray["key2"] = secondArray; 

    cout<<get<map_t>(myArray["key2"])["foo"]<<endl; 
} 

這是對ideone的測試。

0

申報myArray作爲

map <string, map <string,string> > myArray; 

顯然,你不能做myArray["key1"] = "value1";了,但是這是一個強類型語言的權衡。

4

聽起來像是你想

std::map<std::string, boost::any> myArray; 

這將讓對應不同的密鑰值呈現不同的類型。

+0

一個例子將不勝感激。 – technology 2011-06-11 19:49:18

+0

@develroot:http://stackoverflow.com/q/251403/103167 – 2011-06-11 20:40:11