向一个pair向量中添加元素

62

我有一个类似下面这样的vector

pair

vector<pair<string,double>> revenue;

我想从这样的map中添加一个字符串和一个双精度数:

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

但由于 revenue 没有被初始化,它会出现下标越界错误。因此我尝试像这样使用 vector::push_back

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

但那个说法说不能传入两个参数。那么我该怎样把值添加到这个 pairvector 中呢?


所以你没有一个向量对,而是一对向量,或者是一组向量对。一旦你理解了这一点,你就解决了你的问题。 - Christian Rau
10个回答

122

使用std::make_pair函数:

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

2
emplace_back怎么样? - Mr.WorshipMe
2
@Mr.WorshipMe,你可以在C++11中使用它。下面的答案有一个例子。不过我不确定你具体在问什么。 - avakar
这种方法在构造函数中会有所不同吗?(例如,我有一个包含一对向量的类,并希望从二维初始化列表中读取。其中内部列表应该是一对。因此,我循环并像这样vec.push_back(make_pair ...) - gr4nt3d

44

我认为,一个非常好的解决方案是使用C++11的emplace_back函数:

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

它只是在原地创建一个新元素。


11

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

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

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

但是这个函数只能接受一个参数。那么我该如何向这个vector添加一对值呢?

你已经走上了正确的道路,但是想一想:你的vector保存的是什么?它肯定不会在一个位置上同时保存字符串和整数,而是保存了一个Pair。所以……

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

6

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

这将有效。


0

尝试使用另一组临时对:

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

// Inside the loop
temp.first = "string";
temp.second = map[i].second;
revenue.push_back(temp);

0

使用emplace_back函数比任何其他方法都更好,因为它可以在vector<T>这种类型中创建一个就地的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);

0

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

但是我想指出另一种实现相同效果的方法:

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

push_back() 只接受一个参数,所以你可以使用 "{}" 来实现这个功能!


0
你可以使用 std::make_pair
revenue.push_back(std::make_pair("string",map[i].second));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接