Добавление к вектору пары - PullRequest
48 голосов
/ 26 октября 2011

У меня есть 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);

Но это говорит о том, что нельзя принимать два аргумента.Так как же я могу добавить к этому vector из pair?

Ответы [ 8 ]

94 голосов
/ 26 октября 2011

Использование std::make_pair:

revenue.push_back(std::make_pair("string",map[i].second));
30 голосов
/ 04 марта 2014

ИМХО, очень хорошее решение - использовать функцию c ++ 11 emplace_back :

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

Он просто создает новый элемент на месте.

10 голосов
/ 26 октября 2011
revenue.pushback("string",map[i].second);

Но это говорит о том, что нельзя принимать два аргумента.Итак, как я могу добавить к этой паре векторов?

Вы на правильном пути, но подумайте об этом;что держит твой вектор?Конечно, он не содержит строку и int в одной позиции, он содержит Pair.Итак ...

revenue.push_back( std::make_pair( "string", map[i].second ) );     
6 голосов
/ 05 мая 2015

Или вы можете использовать список инициализации:

revenue.push_back({"string", map[i].second});
6 голосов
/ 26 октября 2011

Прочитайте следующую документацию:

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

или

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

Я думаю, что это поможет. Эти сайты являются хорошими ресурсами для C ++ , хотя последний, кажется, является предпочтительной ссылкой в ​​наши дни.

2 голосов
/ 12 января 2017
revenue.push_back(pair<string,double> ("String",map[i].second));

это будет работать.

0 голосов
/ 14 марта 2019

Вы можете использовать std::make_pair

revenue.push_back(std::make_pair("string",map[i].second));
0 голосов
/ 17 января 2016

Попробуйте использовать другую временную пару:

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

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