2011-10-25 47 views
32

的矢量我有pair一個vector像這樣:添加到對

vector<pair<string,double>> revenue; 

我想添加一個字符串,並從地圖這樣的雙:

revenue[i].first = "string"; 
revenue[i].second = map[i].second; 

但由於收入未初始化,則會出現超出界限的錯誤。所以,我嘗試使用vector::push_back這樣的:

revenue.push_back("string",map[i].second); 

但是,說不能把兩個參數。那麼我該如何補充pairvector

+0

所以你沒有一個矢量對,而是一對矢量,或者成對的矢量。一旦你明白了這一點,你已經解決了你的問題。 –

回答

76

使用std::make_pair

revenue.push_back(std::make_pair("string",map[i].second)); 
+1

emplace_back呢? –

+1

@ Mr.WorshipMe,你可以在C++ 11中使用它。查看下面的答案作爲示例。我不確定你在問什麼。 – avakar

+1

我指着一個更優雅,可能更快的解決方案...我沒有看到下面的評價不足......您可能想更新您的答案... –

9
revenue.pushback("string",map[i].second); 

但這說不能帶兩個參數。那麼我怎樣才能加入這個向量對呢?

你走在正確的道路上,但想一想;你的矢量是什麼?它當然不會在一個位置持有一個字符串和一個int,它包含一個Pair。所以......

revenue.push_back(std::make_pair("string", map[i].second));  
20

恕我直言,一個非常好的解決方案是使用C++ 11 emplace_back功能:

revenue.emplace_back("string", map[i].second); 

它只是在地方創建新的元素。

4

或者你可以使用初始化列表:

revenue.push_back({"string", map[i].second}); 
-2

嘗試使用其它臨時配對:

pair<string,double> temp; 
vector<pair<string,double>> revenue; 

// Inside the loop 
temp.first = "string"; 
temp.second = map[i].second; 
revenue[i].push_back(temp); 
+0

收入[我]是錯的! – bicepjai

1
revenue.push_back(pair<string,double> ("String",map[i].second)); 

這會工作。