2016-03-11 68 views
3

我試圖值佈設成地圖像這樣:佈設成'的std :: unordered_map`用'的std :: pair`值

std::unordered_map<std::string, std::pair<std::string, std::string>> testmap; 
testmap.emplace("a", "b", "c")); 

這是不行的,因爲:

錯誤C2661: '的std ::對::對':沒有重載函數採用3個參數

我已經看了this answerthis answer,似乎李我需要將std::piecewise_construct納入安置工作,才能使其發揮作用,但我不認爲我很清楚在這種情況下應該把它放在哪裏。嘗試像

testmap.emplace(std::piecewise_construct, "a", std::piecewise_construct, "b", "c"); // fails 
testmap.emplace(std::piecewise_construct, "a", "b", "c"); // fails 
testmap.emplace(std::piecewise_construct, "a", std::pair<std::string, std::string>(std::piecewise_construct, "b", "c")); // fails 

有沒有辦法讓這些值可以emplace

我正在編譯msvc2013以防萬一。

回答

5

您需要使用std::piecewise_constructstd::forward_as_tuple作爲參數。

以下不編譯:

#include <unordered_map> 

int main() 
{ 
    std::unordered_map<std::string,std::pair<std::string,std::string>> testmap; 
    testmap.emplace(std::piecewise_construct,std::forward_as_tuple("a"),std::forward_as_tuple("b","c")); 
    return 0; 
} 
相關問題