56

我有一个这样vector的: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);

但这表示不能接受两个论点。那么我该如何添加vectorpair

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

但这表示不能接受两个论点。那么如何添加到这个向量对呢?

您走在正确的道路上,但请考虑一下;你的向量有什么?它当然不会在一个位置保存一个字符串和一个 int,它保存一个Pair. 所以...

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

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

revenue.push_back({"string", map[i].second});
于 2015-05-05T14:16:51.813 回答
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 回答
0

您可以使用std::make_pair

revenue.push_back(std::make_pair("string",map[i].second));
于 2019-03-14T06:09:04.510 回答
0

使用emplace_backfunction 比任何其他方法都好,因为它创建了一个Twhere类型的对象vector<T>,而push_back期望你提供一个实际值。

vector<pair<string,double>> revenue;

// make_pair function constructs a pair objects which is expected by push_back
revenue.push_back(make_pair("cash", 12.32));

// emplace_back passes the arguments to the constructor
// function and gets the constructed object to the referenced space
revenue.emplace_back("cash", 12.32);
于 2020-04-17T08:23:08.733 回答
0

正如许多人建议的那样,您可以使用std::make_pair.

但我想指出另一种方法:

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

push_back() 接受单个参数,因此您可以使用“{}”来实现这一点!

于 2020-05-13T17:54:40.297 回答
-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 回答