web-dev-qa-db-ja.com

ペアのベクトルに追加する

私はvector of pairを持っています:

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つの引数を取ることができないと言います。 vector of pairに追加するにはどうすればよいですか?

47
Richard

std::make_pair を使用します。

revenue.Push_back(std::make_pair("string",map[i].second));
93
avakar

私見、非常に素晴らしい解決策は、c ++ 11 emplace_back 関数を使用することです:

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

新しい要素を作成するだけです。

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

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

あなたは正しい道を歩んでいますが、考えてみてください。あなたのベクトルは何を保持していますか?確かに、文字列とintを1つの位置に保持するのではなく、Pairを保持します。そう...

revenue.Push_back( std::make_pair( "string", map[i].second ) );     
10
Ed S.

または、リストの初期化を使用できます。

revenue.Push_back({"string", map[i].second});
7
Hsu Hau

次のドキュメントを読んでください。

http://cplusplus.com/reference/std/utility/make_pair/

または

http://en.cppreference.com/w/cpp/utility/pair/make_pair

それが役立つと思います。これらのサイトは、C++の優れたリソースですが、最近では後者が推奨されるようです。

6
hochl
revenue.Push_back(pair<string,double> ("String",map[i].second));

これは動作します。

3
Caner SAYGIN

std::make_pairを使用できます

revenue.Push_back(std::make_pair("string",map[i].second));
0
Sardeep Lakhera