56

私はそのvectorようpairなものを持っています:

vector<pair<string,double>> revenue;

次のようなマップから文字列と double を追加したい:

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

しかし、収益は初期化されていないため、範囲外のエラーが発生します。だから私はこのように使ってvector::push_backみました:

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

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

4

10 に答える 10

113

使用std::make_pair:

revenue.push_back(std::make_pair("string",map[i].second));
于 2011-10-25T23:30:55.360 に答える
38

私見、非常に良い解決策は、c++ 11 emplace_back関数を使用することです。

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

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

于 2014-03-04T15:05:21.490 に答える
11
revenue.pushback("string",map[i].second);

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

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

revenue.push_back( std::make_pair( "string", map[i].second ) );     
于 2011-10-25T23:32:12.237 に答える
6

次のドキュメントをお読みください。

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

また

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

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

于 2011-10-25T23:31:41.703 に答える
4
revenue.push_back(pair<string,double> ("String",map[i].second));

これは機能します。

于 2017-01-11T22:22:45.023 に答える
-1

別の一時的なペアを使用してみてください:

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

// Inside the loop
temp.first = "string";
temp.second = map[i].second;
revenue.push_back(temp);
于 2016-01-17T09:51:27.023 に答える