2015-10-19 116 views
1

如何將std::map元素push_back到std::vectorPush_back map into vector

std::vector<std::map<int, int>> v; 

// Error 
v.push_back(std::make_pair(0, 1)) 

什麼原因導致此錯誤?

回答

2

使用

v.push_back(std::make_pair(0, 1)) 

是一個問題,因爲一個std::pair不能被轉換爲std::map。您可以使用我能想到的以下方法之一來解決問題。

方法1

如果可以使用C++編譯器11,

v.push_back({{0, 1}}); 

方法2

std::map<int, int> m; 
m.insert(std::make_pair(0, 1)); 
v.push_back(m); 

方法3

std::map<int, int> m; 
v.push_back(m); 
v.back().insert(std::make_pair(0, 1)); 
+0

'{{}}'做了什麼? – user963241

+0

@ user963241,它可以使用'initialization_list'構造一個'std :: map'。例如。你可以使用'std :: map m {{0,1}};'構造一個'std :: map'。 –

0

您可以將地圖推送到您的數據結構中,std::vector<std::map<int, int>> v。不是一對即地圖的元素。

因此,請按照以下方法操作。

std::map<int,int> t; 
t.insert(std::make_pair(0, 1)); 
v.push_back(t); 

或在C++ 11

v.push_back({{1,2}}); 

或可替代的情況下,你可以去emplace_back了。

void emplace_work_around(
    std::vector<std::map<int, int>>& v, 
    std::initializer_list<std::pair<const int,int>> item 
) 
{ 
    v.emplace_back(item); 
} 

int main() 
{ 
    std::vector<std::map<int, int>> v; 

    emplace_work_around(v,{{1,2}}); 
} 
1
std::vector<std::map<int, int>> v; 

意味着您聲明地圖矢量!

push_back地圖爲載體,這樣

v.push_back({std::make_pair(0, 1)}); //Needs C++11 

OR

std::map<int, int> map1; 
map1.insert(std::make_pair(0, 1)); 
v.push_back(map1); 

push_back「納克一個pair顯然會導致成編譯錯誤。

相關問題