私は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
に追加するにはどうすればよいですか?
std::make_pair
を使用します。
revenue.Push_back(std::make_pair("string",map[i].second));
私見、非常に素晴らしい解決策は、c ++ 11 emplace_back 関数を使用することです:
revenue.emplace_back("string", map[i].second);
新しい要素を作成するだけです。
revenue.pushback("string",map[i].second);
しかし、それは2つの引数を取ることができないと言います。それでは、このベクトルペアにどのように追加できますか?
あなたは正しい道を歩んでいますが、考えてみてください。あなたのベクトルは何を保持していますか?確かに、文字列とintを1つの位置に保持するのではなく、Pair
を保持します。そう...
revenue.Push_back( std::make_pair( "string", map[i].second ) );
または、リストの初期化を使用できます。
revenue.Push_back({"string", map[i].second});
次のドキュメントを読んでください。
http://cplusplus.com/reference/std/utility/make_pair/
または
http://en.cppreference.com/w/cpp/utility/pair/make_pair
それが役立つと思います。これらのサイトは、C++の優れたリソースですが、最近では後者が推奨されるようです。
revenue.Push_back(pair<string,double> ("String",map[i].second));
これは動作します。
std::make_pair
を使用できます
revenue.Push_back(std::make_pair("string",map[i].second));