2017-10-13 246 views
-3

這是一個填充地圖的現有代碼。以不同方式填充地圖

typedef unordered_map<std::string, SomeSet> StringToSetMap; 

StringToSetMap myMap; 

std::string str ("hello"); 

SomeSet &mySet = myMap[str]; //Map populates here 

「SomeSet」是一個typedefed unordered_set。

地圖,因爲我知道,可以在僅方式填充提到here

這是怎麼填充地圖這條路?

+3

什麼的問題的答案你鏈接到這裏發生了什麼不清楚? – NathanOliver

回答

1

See the docs對於所述下標運算符。需要注意的是運營商的描述是,它...

返回映射到一個等價鍵,鍵的值, 參考,如果這樣的鍵不存在

執行插入

還要注意:

返回值

參考到映射的值o f如果不存在具有密鑰鍵 的元素,則爲新元素。否則,對現有元素 的映射值的引用,其鍵值等於密鑰。

「你好」是不是在你的地圖上的一個關鍵,所以它被插入和一個閃亮的新SomeSet對象的引用返回給您。

(注:關鍵是上移,建造或拷貝構造,但無論哪種方式的值總是默認構造確保您有一個默認的構造函數SomeSet!)

+1

值得指出的是,插入的元素將是默認構造的,因此只有在您的映射爲具有默認構造函數的類型時才能使用下標運算符。 –

+0

@ scohe001因此,我也可以先填充mySet,然後執行'myMap [str] = mySet'。那是對的嗎? – ontherocks

+0

@ontherocks當然。 'myMap [str]'返回一個對新的'SomeSet'對象的引用,然後你將它設置爲等於某個東西。它相當於'SomeSet&thing = myMap [str]; thing = mySet;' – scohe001