Добавление к вектору пары

у меня есть vector of 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 of pair?

7 ответов


использовать std::make_pair:

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

IMHO, очень хорошее решение-использовать c++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

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


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

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

revenue.push_back(pair<string,double> ("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[i].push_back(temp);