Ответ 1
Используйте std::make_pair
:
revenue.push_back(std::make_pair("string",map[i].second));
У меня есть vector
of 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);
Но это говорит, что нельзя принимать два аргумента. Итак, как я могу добавить к этому vector
из pair
?
Используйте std::make_pair
:
revenue.push_back(std::make_pair("string",map[i].second));
IMHO, очень приятное решение - использовать функцию С++ 11 emplace_back:
revenue.emplace_back("string", map[i].second);
Он просто создает новый элемент на месте.
revenue.pushback("string",map[i].second);
Но это говорит, что нельзя принимать два аргумента. Итак, как я могу добавить к этой векторной паре?
Вы на правильном пути, но подумайте об этом; что удерживает ваш вектор? Он, конечно, не содержит строку и int в одной позиции, она содержит Pair
. Итак...
revenue.push_back( std::make_pair( "string", map[i].second ) );
Прочитайте следующую документацию:
http://cplusplus.com/reference/std/utility/make_pair/
или
http://en.cppreference.com/w/cpp/utility/pair/make_pair
Я думаю, что это поможет. Эти сайты являются хорошими ресурсами для С++, хотя последнее кажется предпочтительным в наши дни.
Или вы можете использовать список инициализации:
revenue.push_back({"string", map[i].second});
revenue.push_back(pair<string,double> ("String",map[i].second));
это будет работать.
Вы можете использовать std::make_pair
revenue.push_back(std::make_pair("string",map[i].second));
Попробуйте использовать другую временную пару:
pair<string,double> temp;
vector<pair<string,double>> revenue;
// Inside the loop
temp.first = "string";
temp.second = map[i].second;
revenue.push_back(temp);