web-dev-qa-db-fra.com

Ajout à un vecteur de paire

J'ai un vector de pair comme celui-ci:

vector<pair<string,double>> revenue;

Je veux ajouter une chaîne et un double d'une carte comme celle-ci:

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

Mais comme les revenus ne sont pas initialisés, ils génèrent une erreur hors limites. Alors j'ai essayé d'utiliser vector::Push_back comme ça:

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

Mais cela dit ne peut pas prendre deux arguments. Alors, comment puis-je ajouter à cela vector de pair?

47
Richard

Utilisation std::make_pair :

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

IMHO, une solution très agréable consiste à utiliser c ++ 11 emplace_back fonction:

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

Cela crée simplement un nouvel élément en place.

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

Mais cela dit ne peut pas prendre deux arguments. Alors, comment puis-je ajouter à cette paire de vecteurs?

Vous êtes sur le bon chemin, mais réfléchissez-y; que tient ton vecteur? Il ne tient certainement pas une chaîne et un int dans une position, il contient un Pair. Alors...

revenue.Push_back( std::make_pair( "string", map[i].second ) );     
10
Ed S.

Ou vous pouvez utiliser la liste d'initialisation:

revenue.Push_back({"string", map[i].second});
7
Hsu Hau

Lisez la documentation suivante:

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

ou

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

Je pense que ça va aider. Ces sites sont de bonnes ressources pour C++ , bien que ce dernier semble être la référence préférée de nos jours.

6
hochl
revenue.Push_back(pair<string,double> ("String",map[i].second));

cela fonctionnera.

3
Caner SAYGIN

Vous pouvez utiliser std::make_pair

revenue.Push_back(std::make_pair("string",map[i].second));
0
Sardeep Lakhera