2014-02-23 73 views
3

我有這樣的方法:插入一個std :: initializer_list到的std ::地圖

std::map<std::string, int> container; 

void myMap(std::initializer_list<std::pair<std::string, int>> input) 
{ 
    // insert 'input' into map... 
} 

我可以調用該方法是這樣的:

myMap({ 
    {"foo", 1} 
}); 

我如何轉換我的自定義參數並插入地圖?

我想:

container = input; 

container(input); 

但不工作,因爲地圖的參數僅std::initializer_list而且也沒有std::pair那裏。

謝謝大家。

回答

8
container.insert(input.begin(), input.end()); 

如果你想更換地圖的內容。先做container.clear();

6

您的問題是性病的VALUE_TYPE ::地圖<的std :: string,詮釋>的std ::對<的std :: string,詮釋>。它是std :: pair < const std :: string,int >。注意密鑰上的const。這工作得很好:

std::map<std::string, int> container; 

void myMap(std::initializer_list<std::pair<const std::string, int>> input) { 
    container = input; 
} 

如果你不能改變你的函數的簽名,你必須寫一個循環或使用的std ::複製到每個輸入元素轉換成容器的VALUE_TYPE。但我猜你可能可以,因爲它叫做我的地圖而不是otherGuysMap :)。

相關問題