2012-05-28 38 views
1

我需要創建鍵/值對的這樣一個集合:收集INT /字符串[]用一行代碼爲每個插入

map<const int, string[]> myMap; // psuedo code 

什麼是要去了解它的最好方法是什麼?
有沒有辦法做到這一點,我可以在一行中初始化它像:

myMap.Insert(1, new string[]{ "stack", "is", "awesome" }); // pseudo code 
+2

你爲什麼要使用'string'陣列(這實際上是一個'string'指針,在這裏)?爲什麼不使用'vector '而避免'new'? –

+0

謝謝,那是我忽視的一點。我現在會研究它。 –

+0

@JonathanGrynspan:代碼[甚至沒有編譯](http://ideone.com/pOh4S)。 –

回答

1

假設你決定要堅持大致您目前使用的結構(與int爲重點和string S作爲關聯值的集合),你可能想使用std::vector<std::string>作爲值,所以你map就像定義:

std::map<int, std::vector<std::string> > mymap; 

在這種情況下,它可能是最容易使用陣列狀的符號做你插入:

mymap[1] = {"String", "is", "awesome"}; 

就目前來看,這取決於使用C++ 11支撐初始化器列表。這將與最新的編譯器(例如,gcc 4.7.0)一起工作,但許多較舊的編譯器未能與C++ 11保持一致(例如,VC++ 10,VC++ 11 beta)。

+0

您是對的。這正是我期待的。不幸的是,它在vs2010中沒有提供atm。但由於它基本上將在不久的將來工作,我會將其標記爲答案。 至於我目前的問題去了,我解決了這個問題通過創建一個返回的矢量的char *的省略號功能,這樣我就可以這樣調用: 地圖> MYMAP; myMap [1] = charStringsToVector(「word1」,「word2」,NULL); –

1

可以使用效用函數make_pair

myMap.insert(make_pair(1,"stack")); 

不知道你爲什麼會需要一個string [],您可以通過一個唯一的密鑰吹罰多個字符串不是選擇std::map的目的是什麼?爲什麼你需要一個數組,然後std::map已經提供。

+0

如果value是一個字符串[],該怎麼辦? –

+0

哦,你的意思是像每個鍵有多個值? –

+0

@PrivateVoid:每個鍵的多個值是[** std :: multimap **](http://www.cplusplus.com/reference/stl/multimap/)爲您提供的。如果這是需求,爲什麼不使用'std :: multimap'。 –

1

如果您不在乎您是更換還是隻創建operator[]

std::map<int, std::string> mymap; 
    mymap[1] = "stack is awesome"; 

並且不要在地圖中使用指針。或者使用std::multimap作爲具有相同密鑰的多個元素。

例與std::multimap

int main() { 
    std::multimap<int, std::string> mymmap{{1, "stack"}, 
         {1, "is"}, 
         {1, "awesome"}}; 
    auto range = mymmap.equal_range(1); 
    for (auto i = range.first; i != range.second; ++i) 
    { 
     std::cout << (*i).second << std::endl; 
    } 
} 
+0

這就是爲什麼它標記爲僞代碼 –

+0

@PrivateVoid:'map myMap;'沒有標記爲僞代碼。 –

+0

感謝您的反饋,爲清晰起見進行了編輯 –

1

你應該看一看的std :: multimap中,它可能更適合您的用例:

multimap<int, string> mm; 

它一樣,但它可以容納多個值相同的鍵映射。這通常由一個二叉樹來實現,它不會強制唯一性。

http://en.cppreference.com/w/cpp/container/multimap

或者你可以使用:

map<int, vector<string>> m; 

可以初始化這樣的:

map<int, vector<string>> m { 
    { 1, { "stack", "is", "awesome" } }, 
    { 42, { "foo", "bar", "baz" } } 
}; 
相關問題