2011-10-25 8 views
32

私は、このようなようpairvectorを持っている:ペアのベクトルに追加する

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); 

しかし、それは2つの引数を取ることができないと言います。だから、どのように私はpairのこのvectorに追加することができますか?

+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); 

しかし、それは2つの引数を取ることができないと言います。では、このベクターペアにどのように追加できますか?

あなたは正しい道を歩いていますが、それについて考えてください。あなたのベクトルは何を保持していますか?確かに1つの位置に文字列とintを保持しません。Pairを保持します。だから、非常に素晴らしいソリューションは++ 11 emplace_back機能cを使用することです...

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

IMHO、:

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

revenue [i]が間違っています! – bicepjai

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

これは動作します。

関連する問題