std::map une clé, deux valeurs
Quelle est la meilleure façon de mapper les deux valeurs de clé?
c'est à dire Un élément avec une valeur et bool.
Essayé d'utiliser:
std::map<std::string, std::pair<std::string, bool> > myMap2
Mais qui ne semble pas être la bonne solution. Est-il une façon plus élégante de le faire?
std::pair<>
est tout simplement parfait. Quel est votre préoccupation?OriginalL'auteur JonnyCplusplus | 2011-04-06
Vous devez vous connecter pour publier un commentaire.
C'est effectivement la bonne solution. Plus généralement, pensez à utiliser
std::tuple
au lieu destd::pair
pour une interface uniforme quel que soit le nombre de valeurs (commestd::pair
est évidemment limité à deux), ouboost::tuple
si votre compilateur est trop vieux pour expédier avec unstd::
oustd::tr1::
mise en œuvre.Ou un struct, lorsque votre tuple commence à sortir de la main...
lorsque le tuple contient plus de deux éléments. 🙂 Plus sérieusement, les n-uplets de promouvoir illisible code lorsque leur contenu ne sont pas de façon homogène tapé ou structurées dans certains de manière évidente. Code qui dit
iter->second.get<6>()
est méchant.sans doute, même si elle contient plus de un item :-). Je pense que ce que vous pouvez sortir avec repose un peu sur la façon largement le tuple est utilisé. Dans une petite zone de code c'est pas si mal, dans un moyen largement utilisé interface publique choses devraient probablement être nommé. Par exemple je préfère le il si les membres d'éléments cartographiques ont été nommés
key
,value
plutôt quefirst
,second
, maisstd::pair
existe déjà, il est livré avecmake_pair
, alors il est probablement utile de mettre en place avec des que pour éviter une seconde près identique au modèle de classemap_entry<Key,Value>
.OriginalL'auteur ildjarn
Utiliser
std::pair<>
comme vous l'avez fait, ou faire un custom structure contenant les valeurs que vous souhaitez stocker. Je ferais le dernier dans la plupart des cas, les valeurs ont des noms plus descriptifs quefirst
etsecond
.OriginalL'auteur John Zwinck
Normalement, j'ai créer un simple mapValue struct/classe.
OriginalL'auteur ygao