Carte de l'int et de vector<int> en c++
J'ai travaillé avec <map>
, où j'ai déclaré une carte comme
map <int , vector<int> > tree;
et je suis en train d'affecter des valeurs à des. Mon objectif est de placer plusieurs valeurs comme des éléments de ses touches.
Quelque chose comme ceci:
0=null
1=>0
2=>1,0
3=>2,1,0
4=>3,2,1,0
5=>0
J'ai essayé d'attribuer à la carte comme ça, mais il ne fonctionne pas.
tree[3]=vector<int>(2,1,0);
Pouvez-vous trouver où est le problème, ou comment puis-je faire une fonction qui fonctionne comme un dictionnaire Python?
EDIT: tree[1]=vector<int>(0);
tree[2]=vector<int>(1,0);
ci-dessus 2 façons de répartir le travail.
EDIT2: je ne suis pas à l'aide de c++11
Ce n'est pas valide d'un std::vector appel du constructeur.
L'ordre d'entiers dans les vecteurs de la matière dans vos scénarios?
Erm... vérifier les valeurs, s'il vous plaît.
L'ordre d'entiers dans les vecteurs de la matière dans vos scénarios?
Erm... vérifier les valeurs, s'il vous plaît.
vector<int>(0)
généré un vide vecteur et vector<int>(1,0)
donne un vecteur avec un seul élément qui est 0
. Voir le constructeurs pour std::vector
.OriginalL'auteur george mano | 2013-03-04
Vous devez vous connecter pour publier un commentaire.
Avec C++11, vous pourriez essayer:
d'Autres que cela, la question pourrait utiliser plus de détails et un peu de code de ce que vous avez déjà essayé...
error: deducing from brace-enclosed initializer list requires #include <initializer_list> view.cc:578: error: no matching function for call to ‘std::vector<int, std::allocator<int> >::vector(<brace-enclosed initializer list>)’
Alors, avez-vous essayé d'ajouter l'mentionnées
#include
?Voulez-vous dire
#include <vector>
?Pas de. Je veux dire
#include <initializer_list>
. Avez-vous lire le message d'erreur que le compilateur a généré pour vous?Il ne devrait pas être nécessaire d'indiquer le type de manière explicite. Sur les RHS des affectations, un pur corset-init-liste devrait fonctionner, trop:
tree[3] = { 2 , 1 , 0};
OriginalL'auteur Daniel Frey
Puisque vous demandez un C++03 réponse c' (plus détaillé que C++11) la solution la.
OriginalL'auteur Drew Dormann
Avez-vous envisagé de
std::multi_map
?OriginalL'auteur sehe
Comme Daniel Frey points, vous pouvez utiliser
En python-comme des pseudo-code, le vecteur constructeur utilisé ici est
Le post original suggère que vous essayez d'utiliser un constructeur de la forme
qui n'existe pas.
Si vous n'êtes pas à l'aide de C++11, utilisez l'une des
vector
's d'autres constructeurs.OriginalL'auteur Mr Fooz
Sans C++11, le code ne sera pas aussi élégant:
Pour séparer le C++11 à partir de C++03. Est-ce quelque chose que je ne devrais pas le faire dans ce cas?
Il suffit de modifier votre réponse originale à cette question.
Hmmm. Je ne ferais jamais cela, car 1) il est facile à utiliser Markdown à la structure un peu plus de réponses, il est facile de garder le C++03 et C++11 pièces à part, et 2) de donner deux réponses il fait regarder comme vous voulez juste le double de la réputation. Mais il n'y a pas de politique claire, je crois. Il y a des méta messages sur ce here et here.
OK, compris. J'ai pensé qu'il serait plus clair, puisque l'information "pas de C++11" a été donné plus tard. Mais maintenant, je ne peux pas supprimer cette réponse, donc s'il vous plaît juste l'ignorer et je ne vais pas le faire à nouveau. J'ai créé mon compte il y a longtemps et j'ai oublié à ce sujet, je n'ai commencé à l'utiliser il y a trois semaines, donc je me sens encore comme un noob ici 🙂
OriginalL'auteur Daniel Frey
Je n'ai pas particulièrement comme va_args mais la solution est "plus propre" à un degré que la plupart aussi longtemps que vous (l'utilisateur) ne pas louper, c'est à dire le mélange de types différents. Un autre inconvénient est que votre vecteur ne peut pas contenir de -1, mais votre cas n'est pas le montrer.
oui, c'est fait. Boost Attribuer
OriginalL'auteur Rapptz